Python 如何解决;浮动;对象不可下标?

Python 如何解决;浮动;对象不可下标?,python,json,python-3.x,pandas,dataframe,Python,Json,Python 3.x,Pandas,Dataframe,我有一个功能,为一名球员制作热度图和传球图: 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()

我有一个功能,为一名球员制作热度图和传球图:

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)

所以,当我调用加载数据时:()

出现以下错误:

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
TypeError回溯(最近一次调用最后一次)
---->1热通道地图(df,“穆罕默德·易卜拉欣·萨赫拉维”)
在热身传球地图中(数据、球员姓名)
16
17#热图
--->18 x_坐标=[i[0]表示i-in-action_数据['location']]
19 y_coord=[i[1]表示i-in-action_数据['location']]
20 sns.kdeplot(x=x_坐标,y=y_坐标,shade=“True”,thresh=0,cmap=“Greens”,n_水平=10)
英寸(.0)
16
17#热图
--->18 x_坐标=[i[0]表示i-in-action_数据['location']]
19 y_coord=[i[1]表示i-in-action_数据['location']]
20 sns.kdeplot(x=x_坐标,y=y_坐标,shade=“True”,thresh=0,cmap=“Greens”,n_水平=10)
TypeError:“float”对象不可下标
预期结果应如下所示:

基于您的JSON,
action\u数据

{
  ...
  "location" : [ 61.0, 40.0 ],
  ...
}
现在,我们有

[i[0] for i in action_data['location']]
因此,对于
action\u data['location']
中的每一个
i
,我们将做一些事情<在这种情况下,code>i将采用
61.0
40.0
的值。现在,我们正在做的“事情”是
i[0]
,因此您的列表将是

[61.0[0], 40.0[0]]
这是胡说八道。如果要将这两个值提取到
x_-coord
y_-coord
,只需执行以下操作即可

x_coord, y_coord = action_data['location']
并且完全避免列表理解。

我发现了问题所在。 当sub完成时,一些玩家必须被替换,并且在.json文件中,位置不在那里,但在操作中添加了_数据(带有NaN值),因为我过滤了关于该玩家的所有数据。下面我将发布更新后的行动数据:

action_data = data[(data['player_name']==player_name) & (data['type_name'] != 'Substitution')]

您正在使用[]的表达式之一是一个浮点表达式,在这里您需要一个列表或字典。将大的表达式分解为小的表达式,找出它是哪一个。对这个问题投否决票的原因是什么。您好,谢谢您的解释。我试图像您所说的那样提取action_数据['location']值,但它显示“ValueError:太多值无法解压缩(预期为2)”。另一个注意事项是,我从一些玩家那里看到,action_数据类似于[61.0 40.]nan。基本上,这个列表中的最后一个元素是nan。对于列表中没有“nan”元素的玩家,我的代码部分很好:“x_coord=[i[0]表示i-in-action_数据['location']]y_coord=[i[1]表示i-in-action_数据['location']]”
action_data = data[(data['player_name']==player_name) & (data['type_name'] != 'Substitution')]