给定一个df
由多个列组成的数据框:
Col1 Col2 Col3 Col4 Col5 Col6
4 2 5 3 4 1
8 3 9 7 4 5
1 3 6 7 4 7
我想func
对一组列应用一个函数
df.apply(lambda x: func(x[['Col1', 'Col2', 'Col3']]), axis=1)
这按预期工作正常。但是,使用
df.apply(lambda x: func(x.iloc[:,0:3]), axis=1)
我收到以下错误:
IndexingError :(“索引器过多”,您在索引0处发生)
由于我想使用三列为一组的循环来使函数自动化,因此我更喜欢使用pandas iloc
或ix
作为索引方法。
有人可以解释这个错误吗?
您需要先删除:
in iloc
,因为使用Series
in apply
,而不是使用DataFrame
:
print (df.apply(lambda x: func(x.iloc[0:3]), axis=1))
测试:
def func(x):
return x.sum()
print (df.apply(lambda x: func(x[['Col1', 'Col2', 'Col3']]), axis=1))
0 11
1 20
2 10
dtype: int64
print (df.apply(lambda x: func(x.iloc[0:3]), axis=1))
0 11
1 20
2 10
dtype: int64
您也可以按以下方式进行检查print
(打印不返回任何内容,因此在输出中为None
):
print (df.apply(lambda x: print(x.iloc[0:3]), axis=1))
dtype: int64
Col1 4
Col2 2
Col3 5
Name: 0, dtype: int64
Col1 8
Col2 3
Col3 9
Name: 1, dtype: int64
Col1 1
Col2 3
Col3 6
Name: 2, dtype: int64
0 None
1 None
2 None
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句