【问题标题】:pandas df after fillna() is still NaNfillna() 之后的 pandas df 仍然是 NaN
【发布时间】:2017-07-28 21:34:53
【问题描述】:

将 40000 行 1 列数据另存为 excel。其中有数百个空值。比如第361行... 当我执行df.fillna(method='bfill') 时,NaN 值仍然是 NaN。 如果切片包含 Null 值的 df 片段,则会按预期进行处理。 我试过但仍然无法填充 NaN 单元格。 那么它有什么问题呢? df文件在这里:

excel file click here

df=pd.read_execel('npp.xlsx')
df.fillna(method='bfill')
print( df.iloc[360:370,] )
Out[122]: 
          0
t360     NaN
t361     NaN
t362     NaN
t363     NaN
t364  220.50
t365  228.59
t366     NaN
t367     NaN
t368     NaN
t369     NaN

在切片 df 上应用 fillna() 时,可以替换 NaN 值:

print( df.iloc[360:370,].fillna(method='bfill') )
       0
t360  220.50
t361  220.50
t362  220.50
t363  220.50
t364  220.50
t365  228.59
t366     NaN
t367     NaN
t368     NaN
t369     NaN

【问题讨论】:

标签: pandas


【解决方案1】:

你需要分配输出:

df = pd.read_excel('npp.xlsx')
df = df.fillna(method='bfill')

df = df[df[0].isnull()]
print (df)
Empty DataFrame
Columns: [0]
Index: []

或者使用inplace=True参数:

df = pd.read_excel('npp.xlsx')
df.fillna(method='bfill', inplace=True)
df = df[df[0].isnull()]
print (df)
Empty DataFrame
Columns: [0]
Index: []

或更短:

df = df.bfill()

df.bfill(inplace=True)

【讨论】:

  • 好的! df = df.fillna(method='bfill') 不等于 df.fillna(method='bfill')?有点困惑。为什么我测试的时候小df可以直接申请df.fillna(method='bfill')
  • 是的,它是相等的,但默认情况下此功能不起作用inplace。因此有必要分配或添加参数。就像df.sum() 然后检查df - 也没有 sum 系列。但工作 df = df.sum()df
  • 但是使用df.fillna(method='bfill')测试一个小数据,它可以运行。那么有什么区别呢?
  • fillna 返回另一个df,因此如果没有分配或没有inplace=True,则df 不会更改。
  • 好的!谢谢你的解释。
猜你喜欢
  • 2022-10-13
  • 2019-11-18
  • 1970-01-01
  • 2020-04-30
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
相关资源
最近更新 更多