【问题标题】:InvalidIndexError while doing fillna on pandas dataframe在 pandas 数据帧上执行 fillna 时出现 InvalidIndexError
【发布时间】:2022-12-18 15:40:19
【问题描述】:

注意,我的 df 每个只有 1000 x 20

这是我的df

poi_name     column_1     column_2     column_3    column_4
block             uts          NaN          NaN         tyi
block             utr          NaN          NaN         tyi

这是我的df1

poi_name     column_1     column_3     column_5
block             uta          yuw          tyu

这是我所做的

df = df.set_index('poi_name')
df1 = df1.set_index('poi_name')
df = df.fillna(df1)

这是错误信息

nvalidIndexError                         Traceback (most recent call last)
<timed exec> in <module>

~/.local/lib/python3.6/site-packages/pandas/core/frame.py in fillna(self, value, method, axis, inplace, limit, downcast)
   4325             inplace=inplace,
   4326             limit=limit,
-> 4327             downcast=downcast,
   4328         )
   4329 

~/.local/lib/python3.6/site-packages/pandas/core/generic.py in fillna(self, value, method, axis, inplace, limit, downcast)
   6084                 )
   6085             elif isinstance(value, ABCDataFrame) and self.ndim == 2:
-> 6086                 new_data = self.where(self.notna(), value)._data
   6087             else:
   6088                 raise ValueError(f"invalid fill value with a {type(value)}")

~/.local/lib/python3.6/site-packages/pandas/core/generic.py in where(self, cond, other, inplace, axis, level, errors, try_cast)
   9009         other = com.apply_if_callable(other, self)
   9010         return self._where(
-> 9011             cond, other, inplace, axis, level, errors=errors, try_cast=try_cast
   9012         )
   9013 

~/.local/lib/python3.6/site-packages/pandas/core/generic.py in _where(self, cond, other, inplace, axis, level, errors, try_cast)
   8792                     other._get_axis(i).equals(ax) for i, ax in enumerate(self.axes)
   8793                 ):
-> 8794                     raise InvalidIndexError
   8795 
   8796             # slice me out of the other

InvalidIndexError: 

【问题讨论】:

  • 您可以将输入作为 DataFrame 构造函数提供吗?我无法重现您的问题(对我来说效果很好)
  • 我认为这是因为 poi_namedf 重复

标签: python pandas dataframe


【解决方案1】:

如评论中所述,我无法复制它。这是完整的代码,使用 pandas 版本 1.4.1:

from numpy import nan
df = pd.DataFrame({'poi_name': ['block', 'block'],
                   'column_1': ['uts', 'utr'],
                   'column_2': [nan, nan],
                   'column_3': [nan, nan],
                   'column_4': ['tyi', 'tyi']})

df1 = pd.DataFrame({'poi_name': ['block'],
                    'column_1': ['uta'],
                    'column_3': ['yuw'],
                    'column_5': ['tyu']})

df = df.set_index('poi_name')
df1 = df1.set_index('poi_name')
df = df.fillna(df1)

print(df)

输出:

         column_1 column_2 column_3 column_4
poi_name                                    
block         uts      NaN      yuw      tyi
block         utr      NaN      yuw      tyi

【讨论】:

    【解决方案2】:

    我也无法重现您的错误。
    但就我而言,df1 中的重复索引似乎是根本原因。
    添加df1.drop_duplicates('poi_name') 可以解决我的问题。

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 2021-02-02
      • 2021-09-07
      • 2020-10-28
      • 2022-11-03
      • 1970-01-01
      • 2021-12-17
      • 2016-02-22
      • 1970-01-01
      相关资源
      最近更新 更多