[英]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.