2016-04-30 26 views
2

Ich analysiere mehrere Tabellen aus dem Internet mit pandas.read_html. Informationen stammen von Seiten wie diesem http://www.sports-reference.com/cfb/players/william-fuller-2/gamelog/. Dies gibt mir Datenrahmen wie die folgenden, die ich abgekürzt haben Platz zu sparen:Shift Pandas Spalten basierend auf der Anzahl der leeren Spalten

Passing Rushing tackles  Rk  Year 
1   2   Nan   Nan  Nan 
2   3   Nan   Nan  Nan 
3   3   Nan   Nan  Nan 
4   5   Nan   Nan  Nan 

Der Grund, dass dies der Fall ist, dass es größere und kleinere Überschriften für jede Tabelle und read_html nimmt sowohl als einen Spaltennamen, so Es gibt die gleiche Anzahl von zusätzlichen Spalten wie gruppierte Header. Ich möchte alle Spaltennamen durch die Anzahl der total Nan Spalten links verschieben, so dass mein df

wird
Rk  Year 
1   2 
2   3   
3   3    
4   5   

klar sein, die Anzahl der total NaN Spalten Änderungen für jede Tabelle, so kann ich nicht nur hart codiert in eine Verschiebung um eine bestimmte Länge.

Gibt es eine einfache Möglichkeit, dass ich das tun kann ??

Es könnte auch funktionieren, wenn ich eine Möglichkeit finden würde, in der Tabelle zu lesen, während ich das over_header "tr" -Tag überspringe.

Danke !!

Antwort

2

Es gibt viele Möglichkeiten, dies zu erreichen, aber ich habe die Robustheit der Spaltenzählung wie unten erreicht.

import pandas as pd 

df = pd.read_csv('your_data.csv') 

to_shift = len(df.dropna(how='all', axis=1).columns) 

df2 = df.dropna(how='all', axis=1) 
df2.columns = df.columns[-to_shift:] 

print df2 

    Rk Year 
0 1  2 
1 2  3 
2 3  3 
3 4  5 
+0

Vielen Dank! Ich dachte mir, dass es Dropna in irgendeiner Weise beinhalten würde, aber danach mit der Spaltenindexierung kämpfte! –

Verwandte Themen