繁体   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