当前位置: 首页 > 知识库问答 >
问题:

熊猫。DataFrame.fillna-TypeError:只有整数标量数组可以转换为标量索引

相弘和
2023-03-14

我想从官方熊猫留档...DataFrame.fillna所以基本上用值1填充dfhtml" target="_blank">数据框“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)

成果目标1

    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

误差表第1页

---------------------------------------------------------------------------
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

代码2我后来还尝试列出any_feature列df['any_feature']的独特特性。唯一()

错误2

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-39-934988075beb> in <module>
----> 1 df['any_feature'].unique()

~/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

尝试解决方案

  • Not dictionary - Pandas: Getting "TypeError: only integer scalar arrays can be converted to a scalar index" while trying to merge data frames
  • Not dictionary - Only integer scalar arrays can be converted to a scalar index how to resolve
  • not answered - How to resolve Python TypeError: "only integer scalar arrays can be converted to a scalar index"
  • Not dictionary - TypeError: only integer scalar arrays can be converted to a scalar index with 1D numpy indices array
  • Not dictionary - numpy array TypeError: only integer scalar arrays can be converted to a scalar index
  • Not dictionary - TypeError: only integer scalar arrays can be converted to a scalar index when use Pandas Fillna
  • I don't want to convert it - How to convert index of a pandas dataframe into a column?
  • I have tried running the following code to test if that object is a dataframe and it said true so it is - https://stackoverflow.com/a/14809149/10270590
    • INPUT
         isinstance(df, pd.DataFrame)
      

共有2个答案

韦高阳
2023-03-14

简单解决方案

  • 导出数据帧到csv:df.to_csv(r'somefilename.csv', index=False)
  • 将saem数据加载回DataFrame:df1=pd.read_csv("r'somefilename.csv")
宋晋
2023-03-14

你的代码中发生了一些奇怪的事情,因为:

  • 只能在myc列中替换NaN,
  • 但您的结果也包含替换的值,例如,在C列中,NaN被替换为2

只运行以下代码(与代码分开):

import pandas as pd
import io

txt = '''myc,B,C,D
NaN,2.0,NaN,0
3.0,4.0,NaN,1
NaN,NaN,NaN,5
NaN,3.0,NaN,4'''

df = pd.read_csv(io.StringIO(txt))
result = df.fillna(value={'myc': 1})

结果应该是:

   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

如果您得到相同的结果,那么显然您的代码有问题,但是在其他地方(在您呈现的代码片段之外)。

另一个需要更改的细节是,值是Pandas的一个属性,您不应该使用具有相同名称的变量。

 类似资料:
  • 我为这个问题制作了两个数组的简单示例:是一个一维数组,索引处有标签,对应于nD数组的相同索引。我获取标签2出现的所有索引,并希望检索中的值。 因此,如果我想要标签2,我得到索引0和3,这应该给我相应数组中索引0和3的值。 但是当我想调用我的函数时,我收到一个TypeError@。 我的职能:

  • 我知道关于这个错误已经有几个问题了。但在这种特殊情况下,我不确定是否已经有了解决我问题的方法。我有这部分代码,我想打印数据帧df的“y”列。发生以下错误:TypeError:只有整数标量数组才能转换为标量索引 可以打印整个数据帧。这看起来像: 这是整个错误消息: 我认为这与numpy阵列有关。提前谢谢你!

  • 我正在尝试一个来自github链接的tensorflow的简单演示代码 我目前正在使用python版本3.5。2 我在命令行中尝试board.py时遇到了这个错误。我已经安装了运行此操作所需的所有依赖项。

  • 数据文件:pattern1.ktx 结果:TypeError:只能将整数标量数组转换为标量索引 看起来够简单?不过我不明白。如何解决这个问题?谢谢你。 这个怎么样? 同样的错误。如何修复?

  • 我正在尝试打印带有cifar-10数据标签的图形xlabel。然而,我不断得到这种类型的错误,如下所示。 它说问题出在plt上。xlabel(class_name[x_train[i]])这条线。请帮我解决这个问题。

  • 问题内容: 我想编写一个函数,根据提供的 bin概率 从训练集中随机选择元素。我 将集合索引划分为11个bin ,然后为它们创建 自定义概率 。 我收到以下错误: 我发现这很奇怪,因为我已经检查了创建的索引数组。它是 一维 ,是 整数 ,并且是 标量 。 我想念什么? 注:我试图通过使用。同样的错误。 问题答案: 错误消息可能在某种程度上具有误导性,但要点是,它是一个列表,而不是一个numpy数组