fillna确实填充了NaN单元格中的数据帧

时间:2017-12-06 21:27:13

标签: python python-2.7 dataframe fillna

我错过了什么? 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

然而,它不起作用......细胞是否由参考?

2 个答案:

答案 0 :(得分:0)

如果行没有NaN,则填充前一行的值,如果不是NaN,则bfill用NEXT行中的值填充行。在这两种情况下,如果你在第一行和/或最后一行都有NaN,他们就不会被填满。尝试一个接一个地做。如果任何列都有完全 NaN值,那么你需要再次使用axis = 1填充,(当我尝试在python 3.6上使用inplace = True时,我得到一个NotImplementedError,这非常烦人,熊猫!)。

答案 1 :(得分: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