【问题标题】:pandas fillna not working熊猫fillna不工作
【发布时间】:2022-02-15 22:55:08
【问题描述】:

我有一个带有 nans 的数据框:

>>>df.head()
Out[1]: 
            JPM US SMALLER COMPANIES C ACC
1990-01-02                             NaN
1990-01-03                             NaN
1990-01-04                             NaN
1990-01-05                             NaN
1990-01-08                             NaN

我有另一个数据框,其中包含值:

>>>t.head()
Out[1]: 
1990-01-02    51.95
1990-01-03    52.63
1990-01-04    53.04
1990-01-05    52.07
1990-01-08    51.73
Name: JPM US SMALLER COMPANIES C ACC, dtype: float64

不幸的是,df.fillna 似乎对我不起作用:

>>>df.fillna( t ).head()
Out[1]: 
            JPM US SMALLER COMPANIES C ACC
1990-01-02                             NaN
1990-01-03                             NaN
1990-01-04                             NaN
1990-01-05                             NaN
1990-01-08                             NaN

[5 rows x 1 columns]

为什么会这样?我在熊猫 0.13.1

【问题讨论】:

  • 糟糕。我修好了它。 df 应该是一个系列,而不是一个数据框。之后它就起作用了。
  • 在使用DataFrame的情况下,可以使用DataFrame.where来使用另一个frame的值来替换null时的值。
  • @benjwadams 我认为在这种情况下使用combine_firstupdate 可能会更好。它们是为此目的而定制的,因此它们应该可以帮助您避免错误。

标签: python pandas


【解决方案1】:

你需要inplace=True

df[1].fillna(0, inplace=True)

【讨论】:

  • 你帮助我避免在我的 pandas 项目中创建这么多新对象。
  • 这里为什么需要inplace=True
  • 以便df 对象被修改就地,而不是创建它的副本并修改这个
  • 你能用df = df.fillna(0)代替inplace吗?
【解决方案2】:

你需要赋值df = df.fillna( t )

【讨论】:

    【解决方案3】:

    或者

    df = df.replace(np.nan, 0) #或您认为合适的任何其他值

    df.replace(np.nan, 0) 或 df.fillna(0) 当我在 Na 操作后立即应用某些 str.replace() 操作时让我失望。所以请注意您的订单命令 -> 第一个 str.replace() 而不是 fillna()

    【讨论】:

      【解决方案4】:

      你有两个选择:

      1) 特定于每一列

      cols_fillna = ['column1','column2','column3']
      # replace 'NaN' with zero in these columns
       for col in cols_fillna:
           df[col].fillna(0,inplace=True)
           df[col].fillna(0,inplace=True)
      

      2) 对于整个数据框

      df = df.fillna(0)
      

      【讨论】:

        【解决方案5】:

        检查为什么 fillna() 在遍历列时不起作用。 创建一个带有列的DataFrame 并检查以下输出:

            for col in df.columns[df.isnull().any()]:
                df[col].fillna(df[col].mode(), inplace = True)
                #df[col].fillna(df[col].mode()[0], inplace = True)
                print(df[col].mode())
                #print(df[col].mode()[0])
                print(type(df[col].mode()))
                #print(type(df[col].mode()[0]))
            df.isnull().sum() / df.shape[0] * 100
        

        之前的没有抛出错误,但没有填充 NA 值。注释行似乎有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-04
          • 2015-10-20
          • 1970-01-01
          • 2017-12-26
          • 2022-01-25
          • 2021-09-26
          • 1970-01-01
          相关资源
          最近更新 更多