簡體   English   中英

為什么我沒有得到這個變量的索引錯誤?

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

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