Wie man Barsche und Achse die gleiche Länge?
Für meine Aufgabe, ich sollte mich um eine Darstellung der tracks 20 Wirbelstürme auf einer Karte mit matplotlib. Aber wenn ich meinen code erhalte ich die Fehlermeldung: AssertionError:Grouper and axis must be the same length
Hier der code, den ich habe:
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)
Hier die komplette Fehlerausgabe:
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
- Sie müssen geben einige weitere details. Welcher Zeile der Fehler tritt auf? Ist es das erste mal durch deine for-Schleife? Was ist die volle Fehlerausgabe?
- Ich habe gerade die komplette Fehlerausgabe. Ich habe Probleme mit group by zur Gruppierung der Längen-und Breitengrad-Werte, um den Verlauf der Pfad des Sturms.
- Es sieht aus wie
name
leer ist, meinten Sie, das zu tun? Wahrscheinlich benötigen, um eine Spalte mit dem Namen gibt. - Auch, können Sie das Ergebnis
print df.head(5)
bis auch da? - Ok, danke. Hat die Spalte Namen 'lat' und/oder 'lon' angegeben werden in der csv-Datei? Was ich versuche zu tun, ist die Länge und die Breite von Spalten aus der Datei in zwei separate Liste, so dass ich könnte zeichnen Sie auf die Karte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie die Gruppierung von (effektiv) eine Liste mit der leeren Liste (
[[]]
). Denn Sie habenname = []
früher und dann Sie wickeln, die in einer Liste als gut.Wenn Sie möchten, um die Gruppe auf eine einzelne Spalte (genannt 'HurricaneName'), sollten Sie etwas wie:
for name, group in df.groupby('HurricaneName'):
Jedoch, wenn Sie wollen, um die Gruppe auf mehrere Spalten, dann müssen Sie gehen eine Liste:
for name, group in df.groupby(['HurricaneName', 'Year'])
Wenn Sie wollen, um es in eine variable, wie Sie haben, Sie können es so machen:
'HurricaneName'
. Ich werde mein edit beantworten zu reflektieren. Wenn diese Antworten zu deiner ursprünglichen Frage (über die Fehlermeldung), können Sie den Pfeil unter meine Antwort zu markieren, Frage gelöst.for name, group in df.groupby(['Name']): latitude = group.Latitude.values group.Longitude.values x,y(latitude,longitude)
richtig sein?Traceback (most recent call last): File "/home/darealmzd/lstorms.py", line 42, in <module> x,y(latitude,longitude) NameError: name 'x' is not defined
x, y = m(latitude, longitude)
ValueError: Grouper and axis must be same length
Dies kann auftreten, wenn Sie mit doppelten Klammern in der
groupby
argument.(Ich habe dies geschrieben, da es ist die top-Ergebnisse auf Google).