6

对于我的任务,我应该使用 matplotlib 在地图上绘制 20 场飓风的轨迹。但是,当我运行我的代码时,我得到了错误:AssertionError:Grouper and axis must be the same length

这是我的代码:

import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt 
from PIL import *
fig = plt.figure(figsize=(12,12))

ax = fig.add_axes([0.1,0.1,0.8,0.8])

m = Basemap(llcrnrlon=-100.,llcrnrlat=0.,urcrnrlon=-20.,urcrnrlat=57.,
        projection='lcc',lat_1=20.,lat_2=40.,lon_0=-60.,
        resolution ='l',area_thresh=1000.)

m.bluemarble()
m.drawcoastlines(linewidth=0.5)
m.drawcountries(linewidth=0.5)
m.drawstates(linewidth=0.5)

# Creates parallels and meridians

m.drawparallels(np.arange(10.,35.,5.),labels=[1,0,0,1])
m.drawmeridians(np.arange(-120.,-80.,5.),labels=[1,0,0,1])
m.drawmapboundary(fill_color='aqua')

# Opens data file

import pandas as pd
name = [ ]
df = pd.read_csv('louisianastormb.csv')
for name, group in df.groupby([name]):
    latitude = group.lat.values
    longitude = group.lon.values
    x,y = m(longitude, latitude)
    plt.plot(x,y,'y-',linewidth=2 )
    plt.xlabel('Longitude')
    plt.ylabel('Latitude')
    plt.title('20 Hurricanes with Landfall in Louisiana')

plt.savefig('20hurpaths.jpg', dpi=100)

这是完整的错误输出:

 Traceback (most recent call last): 
File "/home/darealmzd/lstorms.py", line 31, in <module> 
for name, group in df.groupby([name]): 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/generic.py", line 186, in groupby 
squeeze=squeeze) 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.py", line 533, in groupby 
return klass(obj, by, **kwds) 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.py", line 197, in __init__ 
level=level, sort=sort) 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.py", line 1325, in _get_grouper 
ping = Grouping(group_axis, gpr, name=name, level=level, sort=sort) 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.py", line 1129, in __init__ 
self.grouper = _convert_grouper(index, grouper) 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.py", line 1350, in _convert_grouper 
raise Assertionerror('Grouper and axis must be same length') 
Assertionerror: Grouper and axis must be same length 
4

3 回答 3

10

问题是您(有效地)按空列表([[]])列表进行分组。因为你name = []之前有,然后你也把它包装在一个列表中。

如果您想在单个列(称为“HurricaneName”)上进行分组,您应该执行以下操作:

for name, group in df.groupby('HurricaneName'):

但是,如果要对多个列进行分组,则需要传递一个列表:

for name, group in df.groupby(['HurricaneName', 'Year'])

如果你想把它放在一个变量中,你可以这样做:

col_name = 'State'

for name, group in df.groupby([col_name]):
于 2013-10-21T04:33:36.867 回答
9

ValueError: Grouper and axis must be same length

如果您在groupby参数中使用双括号,则可能会发生这种情况。

(我发布了这个,因为它是谷歌上的最高结果)。

于 2019-08-01T15:28:45.307 回答
0

尝试 iloc 使石斑鱼等于轴。

例如:sns.boxplot(x=df['pH-binned'].iloc[0:3], y=v_count, data=df)

如果轴 = 3。

于 2020-03-13T04:15:30.150 回答