对于我的任务,我应该使用matplotlib在地图上绘制20个飓风的轨迹。但是,当我运行我的代码时,我得到错误:“AssertionError:Grouper和axis必须是相同的长度”。我是python和matplotlib的新手,所以有人可以指出我需要改变的正确方向。提前致谢
这是我的代码:
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
答案 0 :(得分:1)
问题是你是(有效地)分组空列表([[]]
)。因为您之前有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]):
答案 1 :(得分:1)
ValueError: Grouper and axis must be same length
如果在groupby
参数中使用双括号,则会发生这种情况。
(我将其发布,因为它是Google上的最佳搜索结果。)
答案 2 :(得分:0)
尝试iloc使石斑鱼等于轴。
示例: sns.boxplot(x = df ['pH-binned']。iloc [0:3],y = v_count,data = df)
如果axis = 3。