【问题标题】:fillna does fill the dataframe in the NaN cellsfillna 确实填充了 NaN 单元格中的数据框
【发布时间】:2017-12-06 21:27:13
【问题描述】:

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

但是它不起作用...单元格不是由 ref 吗?

【问题讨论】:

    标签: python python-2.7 dataframe fillna


    【解决方案1】:

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

    【讨论】:

    • 每一列中间都有数据。但乞讨,也许最终是一些问题。你是什​​么意思一个接一个地做?这就是我正在做的......不是吗?
    【解决方案2】:

    所以,我不知道为什么,但将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-27
      • 2021-08-22
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      相关资源
      最近更新 更多