我有一个包含数千行的数据帧df。
对于我想要应用函数func的每一行。
作为测试,我想只为第一行df运行func。在func()
我发了一份印刷声明。我意识到print语句运行了2次,即使我将df切片到一行(列还有一行,但那些是列)。
当我执行以下操作时
df[0:1].apply(func, axis=1, x,y,z)
或
df.iloc[0:1,:].apply(func, axis=1, x,y,z)
print语句运行2次,这意味着func()
被执行了两次。
知道为什么会这样吗?
答案 0 :(得分:0)
doc清楚地说:
在当前实现中,在第一列/行上应用调用func两次,以确定它是否可以采用快速或慢速代码路径。
答案 1 :(得分:0)
注意不同的切片技术:
In [134]: df
Out[134]:
a b c
0 9 5 4
1 4 7 2
2 1 3 7
3 6 3 2
4 4 5 2
In [135]: df.iloc[0:1]
Out[135]:
a b c
0 9 5 4
In [136]: df.loc[0:1]
Out[136]:
a b c
0 9 5 4
1 4 7 2
打印:
以系列打印一行:
In [139]: df[0:1].apply(lambda r: print(r), axis=1)
a 9
b 5
c 4
Name: 0, dtype: int32
Out[139]:
0 None
dtype: object
或使用iloc
:
In [144]: df.iloc[0:1, :].apply(lambda r: print(r), axis=1)
a 9
b 5
c 4
Name: 0, dtype: int32
Out[144]:
0 None
dtype: object
打印两行/系列:
In [140]: df.loc[0:1].apply(lambda r: print(r), axis=1)
a 9
b 5
c 4
Name: 0, dtype: int32
a 4
b 7
c 2
Name: 1, dtype: int32
Out[140]:
0 None
1 None
dtype: object
OP:
"即使我正在切片df,print语句也运行了2次 一行"
实际上,你是将切成两行