簡體   English   中英

pandas.DataFrame.fillna - TypeError:只有整數標量數組可以轉換為標量索引

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

嘗試過的解決方案

您的代碼中發生了一些奇怪的事情,因為:

  • NaN的替換應該發生在myc列中,
  • 但是您的結果也包含替換值,例如在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

如果你得到相同的結果,那么顯然你的代碼有問題,但在其他地方(在你提供的代碼之外)。

另一個需要更改的細節是valuesPandas 的一個屬性,您不應該使用具有相同名稱的變量。

簡單的解決方案

  • 將數據df.to_csv(r'somefilename.csv', index=False)導出到 csv: df.to_csv(r'somefilename.csv', index=False)
  • 將 saem 數據加載回 DataFrame: df1 = pd.read_csv("r'somefilename.csv")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM