[英]'int' object is not subscriptable. Pandas
我有數據集df。 在這個數據集中,我有Gross
一欄,我完全不熟悉Python,
我正在嘗試將此列轉換為float
並顯示sum()
dollarGross = lambda x: float(x[1:-1])
df.Gross = df.Gross.apply(dollarGross)
df.Gross.sum()
但我收到此錯誤:
<ipython-input-294-a9010792122a> in <lambda>(x)
----> 1 dollarGross = lambda x: float(x[1:-1])
2 df.Gross = df.Gross.apply(dollarGross)
3 df.Gross.sum()
TypeError: 'int' object is not subscriptable
我想念什么?
您的錯誤從這里開始:
df.Gross.apply(dollarGross)
df.Gross
是pandas.Series
,當您使用apply
方法時,pandas會遍歷該系列的每個成員,並將該成員傳遞給名為dollarGross
的“可調用”(也稱為函數, dollarGross
對此進行更多介紹)。 要理解的關鍵是pandas.Series
的成員是什么。 在這種情況下,它們是整數。 因此,該系列中的每個整數都將傳遞給dollarGross
並按如下方式調用:
dollarGross(184)
依次如下所示:
float(184[1:-1])
這沒有任何意義。 您正在嘗試使用[1:-1]
,即對整數進行下標/切片語法。 這就是錯誤告訴您的內容: 嘿,您不能用整數下標!
這就是為什么最好告訴我們您要做什么的原因。 因為現在我們可以幫助您做到這一點。 記住,我說過您可以通過“可致電” apply
。 好吧, float
是float
對象類的名稱……它也是一個“可調用的”,因為我們可以執行float(184)
。 所以....
df.Gross.apply(float)
應該把事情做好。 但是 ,這樣做可能仍然更好
df.Gross.astype(float)
或者,如果某些df.Gross
成員不能解釋為float
值,則最好使用@MaxU的答案。
AFAIK pd.to_numeric()方法為我們提供了將字符串轉換為數值的最慣用的方法:
df['Gross'] = pd.to_numeric(df['Gross'], errors='coerce')
print(df['Gross'].sum())
我認為您只需要編寫dollarGross = lambda x: float(x)
。 如果使用方括號,則嘗試訪問數組。
我認為您應該使用
dollarGross = df['Gross'] #I defined a new array to store the Gross Values
print(dollarGross.sum())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.