df.iloc [0:1,:]。apply(func,axis = 1,x,y,z)执行func()2次

时间:2016-04-14 17:52:09

标签: python pandas dataframe apply

我有一个包含数千行的数据帧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()被执行了两次。

知道为什么会这样吗?

2 个答案:

答案 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次   一行"

实际上,你是切成两行