2017-03-20 2 views
0

Ich versuche, die maximale Anzahl der Städte (‚CTYNAME‘) in einem Zustand (‚stName‘) mit PANDA Ich habe einen DatenrahmenWarum ich bin immer KeyError in Pandas Python

df_filtered = census_df.copy().filter(items=['SUMLEV','STNAME','CTYNAME']) 
df_filtered = df_filtered.set_index(['STNAME']) 
state_df['STNAME'] = df.index.tolist() 
state_df['STNAME'] = state_df['STNAME'].drop_duplicates() 
state_df = state_df['STNAME'].dropna() 
state_df = pd.DataFrame(state_df) 
state_df.set_index(['STNAME']) 

for state in state_df: 
    state_df['COUNT'] = df.loc[state].count() 

Für einige zu bekommen Grund, obwohl ich den Index auf den Namen des Staates ('STNAME') gesetzt habe, ist der Index eine Reihe von ganzen Zahlen anstelle des Namens des Staates (dh Alaska, Utah, etc).

Und wenn ich versuche, um den Code auszuführen es mir ein Key Error geben

KeyError: 'the label [STNAME] is not in the [index]' 

Antwort

0

Wenn Sie for _ in df tun Sie eigentlich über die Header laufen. Versuchen über die Serie Iterieren state_df['STNAME']

for state in state_df['STNAME']: 
    # do stuff here with state 

Andernfalls verwenden state_df.iterrows() über die Zeilen zu durchlaufen. Wenn "STNAME" Ihr Index ist, können Sie Folgendes tun:

for row in state_df.iterrows(): 
    state_name = row[0] 
    # do stuff here with state name 
+0

Wie ITERATE ich die iterrows verwenden? Ich habe versucht, die nächste (state_df.iterrows()) [1] zu verwenden und aus irgendeinem Grund gibt es mir die gleiche Aufzeichnung "Alabama". –

+0

Wenn ich drucke (state_df), zeigt es eine Liste von Ganzzahlen auf der linken Seite und der STNAME (Staatsname) auf der rechten Seite - die alle eindeutig sind. Ich kann einfach nicht herausfinden, wie man über die Zustandsnamen iteriert ... Auch ich habe versucht, während (~ (next (state_df.iterrows()) [1] .empty())): aber das war ein typeError "Bool" Objekt ist nicht aufrufbar –

+0

Ich habe meine Antwort aktualisiert. Versuchen Sie, die Spalte 'STNAME' zu durchlaufen, wie das erste Beispiel zeigt. – Lgiro

0

Ihr Index ist nicht festgelegt. Versuche dies.

Bearbeiten Sie den Code:

df_filtered = df_filtered.set_index('STNAME') 
+0

@ Linkx_lair. Versuche dies. Hoffe, das wird helfen. – Dheeraj

+0

Ich habe versucht, aber wenn ich versuche, die Liste der Indizes mit index.tolist() auszudrucken, zeigt es stattdessen eine Liste von ganzen Zahlen. Ich weiß nicht, was passiert und warum ich den Index nicht als Statusnamen festlegen kann ('STNAME') –