Tes*_*est 6 python numpy pandas
np.cumsum([1, 2, 3, np.nan, 4, 5, 6])将返回nan第一个之后的每个值np.nan。此外,它会对任何生成器执行相同的操作。然而,np.cumsum(df['column'])不会。做什么np.cumsum(...),以便对数据帧进行特殊处理?
In [2]: df = pd.DataFrame({'column': [1, 2, 3, np.nan, 4, 5, 6]})
In [3]: np.cumsum(df['column'])
Out[3]:
0 1.0
1 3.0
2 6.0
3 NaN
4 10.0
5 15.0
6 21.0
Name: column, dtype: float64
Run Code Online (Sandbox Code Playgroud)
当您np.cumsum(object)使用不是 numpy 数组的对象进行调用时,它将尝试调用有关详细信息object.cumsum(),请参阅此线程。您还可以在Numpy 源中看到它。
pandas方法的默认值为skipna=True. 所以np.cumsum(df)变成 的等价物df.cumsum(axis=None, skipna=True, *args, **kwargs),当然会跳过 NaN 值。Numpy 方法没有选项skipna。
您还可以通过用您自己的方法覆盖 pandas 方法来亲自验证这一点:
class DF(pd.DataFrame):
def cumsum(self, axis=None, skipna=True, *args, **kwargs):
print('calling pandas cumsum')
return super().cumsum(axis=None, skipna=True, *args, **kwargs)
df = DF({'column': [1, 2, 3, np.nan, 4, 5, 6]})
# does calling the numpy function call your pandas method?
np.cumsum(df)
Run Code Online (Sandbox Code Playgroud)
这将打印
calling pandas cumsum
Run Code Online (Sandbox Code Playgroud)
并返回预期结果:
column
0 1.0
1 3.0
2 6.0
3 NaN
4 10.0
5 15.0
6 21.0
Run Code Online (Sandbox Code Playgroud)
然后您可以试验更改的结果skipna=True。
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |