pandas.DataFrame.shift()的填充值(fill_value)无法使用

6

这可能听起来是个奇怪的问题,但是当我使用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

但是它会抛出错误。是否有人知道问题可能是什么?我已经在其他地方搜索过,但似乎没有其他人遇到这个问题...

对我来说,它运行良好,只有最后一行被删除了。 - hacker315
1个回答

7

问题是使用版本0.24+的pandas下,DataFrame.shift没有实现这个参数。

fill_value : object, 可选

用于新引入的缺失值的标量值。默认值取决于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

1
感谢您提供详细的答案。我一开始有些怀疑这是版本问题,因为我记得几天前已经升级了Pandas包,但看来并没有成功。不过,现在知道了在低版本中填充值的其他方法也是很好的。 :) - Sean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接