python - 如何解决“浮动”对象不可下标?
问题描述
我有这个功能,我正在为一名玩家制作热图并传递地图:
def heat_pass_map(data, player_name):
pass_data = data[(data['type_name'] == "Pass") & (data['player_name'] == player_name)]
action_data = data[(data['player_name']==player_name)]
fig=plt.figure()
fig.set_size_inches(7, 5)
ax=fig.add_subplot(1,1,1)
draw_pitch(ax)
plt.axis('off')
#passes
for i in range(len(pass_data)):
# we also differentiate different half by different color
color = "blue" if pass_data.iloc[i]['period'] == 1 else "red"
ax.annotate("", xy = (pass_data.iloc[i]['pass_end_location'][0], pass_data.iloc[i]['pass_end_location'][1]), xycoords = 'data', xytext = (pass_data.iloc[i]['location'][0], pass_data.iloc[i]['location'][1]), textcoords = 'data', arrowprops=dict(arrowstyle="->",connectionstyle="arc3", color = color))
#heatmap
x_coord = [i[0] for i in action_data['location']]
y_coord = [i[1] for i in action_data['location']]
sns.kdeplot(x = x_coord, y = y_coord, shade = "True", thresh = 0, cmap = "Greens", n_levels = 10)
#create arrow legend
blue_arrow = mlines.Line2D([], [], c='blue', marker=r'$\rightarrow$', markersize=15, linestyle='None', label='First half pass')
red_arrow = mlines.Line2D([], [], c='red', marker=r'$\rightarrow$', markersize=15, linestyle='None', label='Second half pass')
plt.ylim(0, 80) # need this, otherwise kde plot will go outside
plt.xlim(0, 120)
plt.legend(handles=[blue_arrow, red_arrow], loc='upper right')
plt.title(str(player_name)+ "'s pass map")
plt.show()
此功能适用于大多数球员,但现在我看到试图为一些阿拉伯足球运动员绘制地图,例如:Mohammad Ibrahim Al Sahlawi
因此,当我调用加载数据时:(单击此处获取 .json 文件)
with open(r'C:\Users\Catalin\Desktop\WorldCupData\data\events\7525.json', encoding = 'utf-8') as data_file: # r inainte de string ca sa il ia ca raw data
data = json.load(data_file)
df = pd.json_normalize(data, sep = "_")
heat_pass_map(df, 'Mohammad Ibrahim Al Sahlawi')
出现以下错误:
TypeError Traceback (most recent call last) <ipython-input-52-b5a94966684b> in <module>
----> 1 heat_pass_map(df, 'Mohammad Ibrahim Al Sahlawi')
<ipython-input-49-5b6755070382> in heat_pass_map(data, player_name)
16
17 #heatmap
---> 18 x_coord = [i[0] for i in action_data['location']]
19 y_coord = [i[1] for i in action_data['location']]
20 sns.kdeplot(x = x_coord, y = y_coord, shade = "True", thresh = 0, cmap = "Greens", n_levels = 10)
<ipython-input-49-5b6755070382> in <listcomp>(.0)
16
17 #heatmap
---> 18 x_coord = [i[0] for i in action_data['location']]
19 y_coord = [i[1] for i in action_data['location']]
20 sns.kdeplot(x = x_coord, y = y_coord, shade = "True", thresh = 0, cmap = "Greens", n_levels = 10)
TypeError: 'float' object is not subscriptable
解决方案
根据您的 JSON,action_data
看起来像
{
...
"location" : [ 61.0, 40.0 ],
...
}
现在,我们有
[i[0] for i in action_data['location']]
所以对于每一个i
in action_data['location']
,我们都会做一些事情。i
,在这种情况下,将采用值61.0
和40.0
。现在,我们正在做的“某事”是i[0]
,所以你的清单将是
[61.0[0], 40.0[0]]
这是胡说八道。如果您想将这两个值提取到x_coord
andy_coord
中,您可以这样做
x_coord, y_coord = action_data['location']
并完全避免列表理解。
推荐阅读
- batch-file - 执行 bat 文件后获取不需要的文件
- r - R使用嵌套的for循环尾部扩展和处理数据
- r - t.test 在第三列上的特定代码之后的两列之间
- sql - 如何在spark上做一个sql连接?
- scala - 在scala中将字符串日期(不带分隔符)转换为日期格式
- html - 我的导航栏粘在页面的右边缘,当它在滚动时粘在顶部
- php - 如何以小时、天、周、月、年 PHP 的形式获取分钟
- php - 我怎样才能改变css的特性?
- python - Python Selenium rel=nofollow 链接
- python - 如何在 QScintilla 中实现基于缩进的代码折叠?