Python pandas.DataFrame.fillna-TypeError:只能将整数标量数组转换为标量索引

Python pandas.DataFrame.fillna-TypeError:只能将整数标量数组转换为标量索引,python,python-3.x,pandas,dataframe,dictionary,Python,Python 3.x,Pandas,Dataframe,Dictionary,我正试图从熊猫官方文件中找到答案pandas.DataFrame.fillna因此基本上用1的值填充df数据框“myc”列中的NaN值 数据数据帧 df myc B C D 0 NaN 2.0 NaN 0 1 0.2 4.0 NaN 1 2 NaN NaN NaN 5 3 NaN 3.0 NaN 4 代码1 values = {'myc': 1} df.fillna(value=values) myc B C D 0 1.0 2.

我正试图从熊猫官方文件中找到答案pandas.DataFrame.fillna因此基本上用1的值填充df数据框“myc”列中的NaN值

数据数据帧

df
   myc    B   C  D
0  NaN  2.0 NaN  0
1  0.2  4.0 NaN  1
2  NaN  NaN NaN  5
3  NaN  3.0 NaN  4
代码1

values = {'myc': 1}
df.fillna(value=values)
    myc B   C   D
0   1.0 2.0 NaN 0
1   0.2 4.0 NaN 1
2   1.0 NaN NaN 5
3   1.0 3.0 NaN 4
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-6a9e5a691bca> in <module>
      1 values = {'myc': 1}
----> 2 df.fillna(value=values)

~/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py in fillna(self, value, method, axis, inplace, limit, downcast)
   4315         downcast=None,
   4316     ) -> Optional["DataFrame"]:
-> 4317         return super().fillna(
   4318             value=value,
   4319             method=method,

~/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in fillna(self, value, method, axis, inplace, limit, downcast)
   6071                     if k not in result:
   6072                         continue
-> 6073                     obj = result[k]
   6074                     obj.fillna(v, limit=limit, inplace=True, downcast=downcast)
   6075                 return result if not inplace else None

~/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2876                 if self.columns.nlevels > 1:
   2877                     return self._getitem_multilevel(key)
-> 2878                 return self._get_item_cache(key)
   2879 
   2880         # Do we have a slicer (on rows)?

~/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in _get_item_cache(self, item)
   3539 
   3540             loc = self.columns.get_loc(item)
-> 3541             values = self._mgr.iget(loc)
   3542             res = self._box_col_values(values, loc)
   3543 

~/anaconda3/lib/python3.8/site-packages/pandas/core/internals/managers.py in iget(self, i)
    986         Return the data as a SingleBlockManager.
    987         """
--> 988         block = self.blocks[self.blknos[i]]
    989         values = block.iget(self.blklocs[i])
    990 

TypeError: only integer scalar arrays can be converted to a scalar index
结果目标1

values = {'myc': 1}
df.fillna(value=values)
    myc B   C   D
0   1.0 2.0 NaN 0
1   0.2 4.0 NaN 1
2   1.0 NaN NaN 5
3   1.0 3.0 NaN 4
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-6a9e5a691bca> in <module>
      1 values = {'myc': 1}
----> 2 df.fillna(value=values)

~/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py in fillna(self, value, method, axis, inplace, limit, downcast)
   4315         downcast=None,
   4316     ) -> Optional["DataFrame"]:
-> 4317         return super().fillna(
   4318             value=value,
   4319             method=method,

~/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in fillna(self, value, method, axis, inplace, limit, downcast)
   6071                     if k not in result:
   6072                         continue
-> 6073                     obj = result[k]
   6074                     obj.fillna(v, limit=limit, inplace=True, downcast=downcast)
   6075                 return result if not inplace else None

~/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2876                 if self.columns.nlevels > 1:
   2877                     return self._getitem_multilevel(key)
-> 2878                 return self._get_item_cache(key)
   2879 
   2880         # Do we have a slicer (on rows)?

~/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in _get_item_cache(self, item)
   3539 
   3540             loc = self.columns.get_loc(item)
-> 3541             values = self._mgr.iget(loc)
   3542             res = self._box_col_values(values, loc)
   3543 

~/anaconda3/lib/python3.8/site-packages/pandas/core/internals/managers.py in iget(self, i)
    986         Return the data as a SingleBlockManager.
    987         """
--> 988         block = self.blocks[self.blknos[i]]
    989         values = block.iget(self.blklocs[i])
    990 

TypeError: only integer scalar arrays can be converted to a scalar index
错误表第1页

values = {'myc': 1}
df.fillna(value=values)
    myc B   C   D
0   1.0 2.0 NaN 0
1   0.2 4.0 NaN 1
2   1.0 NaN NaN 5
3   1.0 3.0 NaN 4
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-6a9e5a691bca> in <module>
      1 values = {'myc': 1}
----> 2 df.fillna(value=values)

~/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py in fillna(self, value, method, axis, inplace, limit, downcast)
   4315         downcast=None,
   4316     ) -> Optional["DataFrame"]:
-> 4317         return super().fillna(
   4318             value=value,
   4319             method=method,

~/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in fillna(self, value, method, axis, inplace, limit, downcast)
   6071                     if k not in result:
   6072                         continue
-> 6073                     obj = result[k]
   6074                     obj.fillna(v, limit=limit, inplace=True, downcast=downcast)
   6075                 return result if not inplace else None

~/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2876                 if self.columns.nlevels > 1:
   2877                     return self._getitem_multilevel(key)
-> 2878                 return self._get_item_cache(key)
   2879 
   2880         # Do we have a slicer (on rows)?

~/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in _get_item_cache(self, item)
   3539 
   3540             loc = self.columns.get_loc(item)
-> 3541             values = self._mgr.iget(loc)
   3542             res = self._box_col_values(values, loc)
   3543 

~/anaconda3/lib/python3.8/site-packages/pandas/core/internals/managers.py in iget(self, i)
    986         Return the data as a SingleBlockManager.
    987         """
--> 988         block = self.blocks[self.blknos[i]]
    989         values = block.iget(self.blklocs[i])
    990 

TypeError: only integer scalar arrays can be converted to a scalar index
尝试过的解决方案

  • 不是字典-
  • 不是字典-
  • 未获答覆-
  • 不是字典-
  • 不是字典-
  • 不是字典-
  • 我不想改变它-
  • 我已经尝试运行以下代码来测试该对象是否为数据帧,它说的是true,所以是-
    • 输入
    • 输出
      True

    • 您的代码中出现了一些奇怪的情况,因为:

      • 仅应在myc列中替换NaN
      • 但您的结果也包含替换的值,例如C中的值 列和NaN在此处替换为2
      只运行以下代码(与代码分开):

      结果应该是:

         myc    B   C  D
      0  1.0  2.0 NaN  0
      1  3.0  4.0 NaN  1
      2  1.0  NaN NaN  5
      3  1.0  3.0 NaN  4
      
      如果你得到了同样的结果,那么显然是有 你的代码有问题,但在其他地方 (在您介绍的代码之外)

      要更改的另一个细节是,值是一个属性
      而您不应使用同名变量。

      简单解决方案

      • 将数据帧导出到csv:
        df.to_csv(r'somefilename.csv',index=False)
      • 将saem数据加载回数据帧:
        df1=pd.read\u csv(“r'somefilename.csv”)

      您的熊猫版是什么?你的代码在我这边运行得很好,我用pandas 1.1.1和1.1.3检查过,pandas没有问题。我想你的DF中有个问题。也许是numpy版本?你能分享更多的代码行吗?或者数据集?你能在某处共享hello.csv吗?如果它在另一台计算机上工作,问题将是您安装的一些软件包。df['myc']=df['myc']]如何。fillna(1)?我已经做了更正,很抱歉,我在这里键入了我的df,所以我随机将值放在那里。