使用多操作初始化数据框中的多列

时间:2019-06-26 12:00:23

标签: python python-3.x pandas

我正在尝试使用apply函数在pandas df中初始化多列。 我有一个数据框df为:

A
dog
cat12
rat_1 wow

我想要的是

A          length   alphabet   digit
dog        3        3          0
cat12      5        3          2
rat_1 wow  9        6          1

这是我正在尝试的代码:

def calculate(x):
    a, l, d = 0, 0, 0
    for i in x:
        if i.isalpha():
            a += 1
        elif i.isnum():
            d += 1
        l += 1
    return l, a, d

df.loc[:, ['length', 'alphabet', 'digit']] = df['A'].apply(calculate)

这不起作用,因为此格式仅适用于单列。我需要类似的格式,以便仅通过将它们添加到calculate函数中就可以添加参数。这不会增加字符串的迭代次数。

我正在使用python3和pandas。

1 个答案:

答案 0 :(得分:1)

在返回Series字典的函数中,Series.str.lenSeries.str.count怎么样。使用DataFrame.assign添加列:

def calculate(ser):
    d= {}

    d['length'] = ser.str.len()
    d['alphabet'] = ser.str.count('[A-Za-z]')
    d['digit'] = ser.str.count('\d')

    return d

df.assign(**calculate(df.A))

[出]

           A  length  alphabet  digit
0        dog       3         3      0
1      cat12       5         3      2
2  rat_1 wow       9         6      1