我正在尝试使用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。
答案 0 :(得分:1)
在返回Series
字典的函数中,Series.str.len
和Series.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