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