我有这个初始数据框:
df = pd.DataFrame(data = {'colX': ['TQ95','SM90','SJ07','SH97','TF28']})
所以df如下:
colX
0 TQ95
1 SM90
2 SJ07
3 SH97
4 TF28
不,我创建了一个非常简单的函数并将其应用于df:
def foo(x):
return x + 'bar'
df.apply(foo)
返回:
colX
0 TQ95bar
1 SM90bar
2 SJ07bar
3 SH97bar
4 TF28bar
那么为什么会这样:
def bar(x):
if len(x) == 4:
return 'x'
elif len(x) == 6:
return 'y'
else:
return 'z'
df.apply(bar)
归还这个?:
colX z
dtype: object
而不是这个?:
colX
0 x
1 x
2 x
3 x
4 x
答案 0 :(得分:3)
你的意思是:
df['colX'].apply(bar)
因此,仅检查列值的长度 完整的代码:
import pandas as pd
def bar(x):
if len(x) == 4:
return 'x'
elif len(x) == 6:
return 'y'
else:
return 'z'
df = pd.DataFrame(data = {'colX': ['TQ95','SM90','SJ07','SH97','TF28']})
df['colX'] = df['colX'].apply(bar)
答案 1 :(得分:2)
p = subprocess.Popen(command, stderr=subprocess.PIPE)
err = p.communicate()[1]
在DataFrame的每一列上执行(对于您的情况,仅在p.communicate()[0]
上)。它与None
相同。您将'bar'附加到该系列中的每个字符串(df.apply(foo)
,该函数是系列,因此colX
也是系列)。
df['colX'] + 'bar'
也在该单个列上执行。它返回标量而不是系列。如果您希望将其应用于每一行,则需要传递x
:
x + 'bar'