[英]TypeError: only integer scalar arrays can be converted to a scalar index when use Pandas Fillna
[英]pandas.DataFrame.fillna - TypeError: only integer scalar arrays can be converted to a scalar index
我试图从官方熊猫文档中做到这一点。 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)
结果目标 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'].unique()
的独特功能
错误 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
尝试过的解决方案
isinstance(df, pd.DataFrame)
True
您的代码中发生了一些奇怪的事情,因为:
仅运行以下代码(与您的代码分开):
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
如果你得到相同的结果,那么显然你的代码有问题,但在其他地方(在你提供的代码之外)。
另一个需要更改的细节是values是Pandas 的一个属性,您不应该使用具有相同名称的变量。
简单的解决方案
df.to_csv(r'somefilename.csv', index=False)
导出到 csv: df.to_csv(r'somefilename.csv', index=False)
df1 = pd.read_csv("r'somefilename.csv")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.