0

我错过了什么?fillna 不填充 NaN 值:

#filling multi columns df with values..

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

#just for kicks
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')

#retun true
print df.isnull().values.any()

我验证了它 - 我实际上在一些第一个单元格中看到了 NaN 值..

编辑 所以我想自己写:

def bfill(df):
    for column in df:
        for cell in df[column]:
            if cell is not None:
                tmpValue = cell
                break

        for cell in df[column]:
            if cell is not None:
                break
            cell = tmpValue

但是它不起作用......单元格不是参考吗?

4

2 回答 2

0

所以,我不知道为什么,但是将 fillna 放在函数之外修复它..

产地:

def doWork(df):
  ...
  df = df.fillna(method='ffill')
  df = df.fillna(method='bfill')

def main():
  ..
  doWork(df)
  print df.head(5) #shows NaN

解决方案:

def doWork(df):
  ...

def main():
  ..
  doWork(df)

  df = df.fillna(method='ffill')
  df = df.fillna(method='bfill')

  print df.head(5) #no NaN
于 2017-12-10T22:26:40.467 回答
0

如果它们不是 NaN,则 ffill 用前一行的值填充行,如果它们不是 NaN,则 bfill 用 NEXT 行的值填充行。在这两种情况下,如果您在第一行和/或最后一行都有 NaN,它们将不会被填充。尝试一个接一个地做。如果任何列完全具有NaN 值,那么您将需要再次填充 axis=1,(尽管当我尝试在 python 3.6 上使用 inplace=True 执行此操作时出现 NotImplementedError ,这非常烦人,熊猫!)。

于 2017-12-06T22:21:03.060 回答