如何用熊猫中的先前数字替换空白值

时间:2020-11-12 16:30:53

标签: python python-3.x pandas numpy dataframe

SS     RR
       10.4
12.6  
 
       5.6
8.7

我想用先前的值填充空白行。

预期结果:

SS     RR
       10.4
12.6   10.4
12.6   10.4      
12.6   5.6
8.7    5.6
8.7    5.6

我试图先用NaN替换空白值,然后再迭代先前的值:

df[df['SS']==""] = np.NaN
df[df['RR']==""] = np.NaN

df.SS.fillna(method='ffill')
df.RR.fillna(method='ffill')

但是由于某种原因,它对数据框没有任何影响。我在这里想念什么?谢谢!

编辑: 如果我想在相应的“ ID”内ffill怎么办?

ID     SS     RR
ABC          10.4
ABC   12.6  
ABC     
LMN           5.6
LMN   8.7

预期结果:

ID     SS     RR
ABC          10.4
ABC   12.6   10.4
ABC   12.6   10.4
LMN           5.6
LMN   8.7     5.6

我是否使用groupby函数以及在何处添加它以使工作正常?再次感谢!

3 个答案:

答案 0 :(得分:2)

您应该将其分配回来或添加inplace

df.SS.fillna(method='ffill',inplace=True)
df.RR.fillna(method='ffill',inplace=True)

#df.SS = df.SS.fillna(method='ffill')
#df.RR = df.RR.fillna(method='ffill')

答案 1 :(得分:1)

fillna不能就地运行。您需要将inplace=True添加到对fillna的呼叫中,如另一个答案所示。

或者,您可以重写代码以使用更正后的输出覆盖数据框。

df = df.replace("", np.nan).ffill()
  • .replace("", np.nan)将在整个数据框架中将所有空格替换为NaN
  • .ffill().fillna(method="ffill")
  • 的快捷方式

由于我们此处未指定inplace=True标志,因此我们可以将这些方法链接在一起并覆盖我们的数据框(或通过更改变量名来产生具有这些更改的新数据框:

clean_df = df.replace("", np.nan).ffill()

答案 2 :(得分:1)

不需要fillna ,您可以直接致电ffill()

In [1793]: df[['SS', 'RR']] = df[['SS', 'RR']].ffill()

In [1794]: df
Out[1794]: 
     SS    RR
0   NaN  10.4
1  12.6  10.4
2  12.6  10.4
3  12.6   5.6
4   8.7   5.6