[英]Why i am getting not index error with this variable?
我正在分析 FIFA 22 足球運動員,我想用速度更快的球員制作圖表,但是當我制作變量時,它會給出錯誤。
Analise01 = df[["sofifa_id", "short_name", "movement_sprint_speed"]]
dados01 = Analise01.groupby( by = ["sofifa_id"]).sum().reset_index()[["sofifa_id",
"short_name", "movement_sprint_speed"]].sort_values("movement_sprint_speed", ascending =
False)
dados01.head(5)
然后當我播放這個單元格時,它給出了錯誤:“不在索引中”
我能夠使用以下玩具示例(按照您想要的方式工作)復制您的問題:
df = pd.DataFrame(columns=['id', 'name', 'speed'])
df = df.append({'id': 1, 'name': 'foo', 'speed': 5}, ignore_index=True)
df = df.append({'id': 1, 'name': 'foo', 'speed': 5}, ignore_index=True)
df = df.append({'id': 2, 'name': 'foo', 'speed': 2}, ignore_index=True)
df = df.append({'id': 3, 'name': 'foo', 'speed': 3}, ignore_index=True)
dados01 = df.groupby( by = ["id"]).sum().reset_index()[["id",
"name", "speed"]].sort_values("speed", ascending =
False)
id name speed
0 1 foofoo 10
2 3 foo 3
1 2 foo 2
但是當我使用你的第一行時:
df2 = df[['id', 'name', 'speed']]
I got the same error:
dados01 = df2.groupby( by = ["id"]).sum().reset_index()[["id",
"name", "speed"]].sort_values("speed", ascending =
False)
KeyError: "['name'] not in index"
我無法確切地告訴您為什么會出現這種情況,但是在您的第一行末尾放置一個.copy()
對我有用。
所以我只是做了
df2 = df[['id', 'name', 'speed']].copy()
結果與使用原始df相同
id name speed
0 1 foofoo 10
2 3 foo 3
1 2 foo 2
奇怪的熊貓錯誤!
您可能還希望將 id/name 列作為索引,這樣您就不會像我一樣在輸出中獲得“name”的總和值。 希望這可以幫助!
這樣做的原因是當您執行.groupby()
和.sum()
時,您會返回一個只有id
作為索引和speed
列的數據幀(因為您不能對字符串/ 'name'
列求和) .
因此,您需要 a) 將總和值合並到id
,或者在 groupby 中包含'name'
,這樣就不會丟失該列。
但是,你為什么在這里使用.sum()
? 我假設沒有多排具有速度的玩家(因為我對 EA 運動很熟悉,每個玩家都有自己的速度屬性,求和對我來說沒有意義。)你只是想排序獲得最快?
但這將使您的代碼正常工作:
import pandas as pd
data = [{'sofifa_id': 1, 'short_name': 'foo', 'movement_sprint_speed': 95},
{'sofifa_id': 1, 'short_name': 'foo', 'movement_sprint_speed': 95},
{'sofifa_id': 2, 'short_name': 'foo', 'movement_sprint_speed': 82},
{'sofifa_id': 5, 'short_name': 'foo', 'movement_sprint_speed': 83}]
analise01 = pd.DataFrame(data)
dados01 = analise01.groupby( by = ["sofifa_id"]).sum().reset_index()
dados01 = dados01.merge(analise01.drop("movement_sprint_speed", axis=1), how='left', on=['sofifa_id']).drop_duplicates()
dados01 = dados01.sort_values("movement_sprint_speed", ascending = False).reset_index(drop=True)
dados01.head(5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.