同事,我遇到了一个无法理解的方法行为,pandas.series.rolling
请解释。为了研究,让我们采用以下人工代码:
import pandas as pd
def rolling_print(x):
print(x)
return float('nan')
ser = pd.Series([1, 2, 3, 5, 6, 7, 8, 9])
print(ser)
ser.rolling(5).apply(rolling_print)
解释一下:我们取pandas.series
1int
到9,把window 5的方法应用到这一系列rolling
(window的值是多少无所谓,sint
和s我都试过了datetime
),然后apply
用help调用函数显示每个窗口的数据。所以,在输出的时候,很明显数据已经由 变成int
了float
。即1.0, 2.0...
,等。为什么?float('nan')
(用任何类型常量替换返回的数据并int
没有改变结果)
正如 BUG 讨论中所写:Pandas 滚动窗口总是转换为浮动 #53214
就是这样。