簡體   English   中英

“ int”對象不可下標。 大熊貓

[英]'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.Grosspandas.Series ,當您使用apply方法時,pandas會遍歷該系列的每個成員,並將該成員傳遞給名為dollarGross的“可調用”(也稱為函數, dollarGross對此進行更多介紹)。 要理解的關鍵是pandas.Series的成員是什么。 在這種情況下,它們是整數。 因此,該系列中的每個整數都將傳遞給dollarGross並按如下方式調用:

dollarGross(184)

依次如下所示:

float(184[1:-1])

這沒有任何意義。 您正在嘗試使用[1:-1] ,即對整數進行下標/切片語法。 這就是錯誤告訴您的內容: 嘿,您不能用整數下標!


這就是為什么最好告訴我們您要做什么的原因。 因為現在我們可以幫助您做到這一點。 記住,我說過您可以通過“可致電” apply 好吧, floatfloat對象類的名稱……它也是一個“可調用的”,因為我們可以執行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.

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