首页 > 解决方案 > pandas.DataFrame.shift() 填充值不起作用

问题描述

这听起来像是一个相当奇怪的问题,但是当我使用pandas.DataFrame.shift()带有fill_value关键字参数的函数时,我不断得到一个TypeError: shift() got an unexpected keyword argument 'fill_value'.

即使是文档上的一个简单示例也给了我这个错误:

df = pd.DataFrame({'c1': [1, 2, 3], 
                   'c2': [4, 5, 6],
                   'c3': [7, 8, 9]})

df.shift(periods=1, fill_value=0)

通常会预期

    c1    c2    c3
0   0     0     0
1   1     4     7
2   2     5     8
3   3     6     9

但它会引发错误。有人会碰巧知道问题可能是什么吗?我在其他地方搜索过,但似乎没有其他人遇到这个问题......

标签: pythonpandasdataframe

解决方案


问题是使用 pandas bellow0.24+没有在DataFrame.shift.

填充值:对象,可选

用于新引入的缺失值的标量值。默认值取决于 self 的 dtype。对于数值数据,使用 np.nan。对于日期时间、时间增量或周期数据等,使用 NaT。对于扩展 dtype,使用 self.dtype.na_value。

在0.24.0版本中更改。

然后使用DataFrame.fillna

df = df.shift(periods=1).fillna(0)

或者,如果可能的话,通过数据中的另一个缺失值DataFrame.fillna指定第一行,并且只替换它:DataFrame.iloc

df = df.shift(periods=1)
df.iloc[0] = df.iloc[0].fillna(0)
print (df)
    c1   c2   c3
0  0.0  0.0  0.0
1  1.0  4.0  7.0
2  2.0  5.0  8.0

推荐阅读