2016-04-26 14 views
1

ich eine CSV-Datei, die Pandas lesen csv mit mehreren Leerzeichen und analysieren Daten

Year Mo Da (01,52) 
1950 1 1 0.00  
1950 1 2 0.00  
1950 1 3 0.05  
1950 1 4 0.00  
1950 1 5 0.07  
1950 1 6 0.07 

wie

aussieht und ich würde es in einen Datenrahmen mit 2 Spalten wie Transformation: eine Datetime-Spalte von YYYYMMDD (mit dem „Jahr Spalten "," Mo "und" Da "in den Rohdaten) und dann der Niederschlag am Rasterpunkt (z. B. 01, 52) als zweite Spalte.

Eine gewünschte Ausgabe wäre:

Datetime Rainfall 
19500101 0.00 
19500102 0.00 
19500103 0.05 

ich auf zwei Fragen steckte: in geeignete Weise während der Lese-in für die Leer Buchhaltung und richtig parse_dates verwenden.

Die einfache Lese-Kommando:

df = pd.read_csv(csv_fl) 

Fast richtig in den Header liest, sondern teilt den (01,52) in separaten Spalten, eine Hinter NaN nachgebend, die nicht da sein sollte. Jede Führung ist sehr geschätzt unter Verwendung

df = pd.read_csv(csv_fl, parse_dates={'Datetime':[0,1,2]}, index_col=0) 

führt zu einem Indexerror

colnames.append(str(columns[c])) 
IndexError: list index out of range 

 Year Mo Da (01 52) 
0 1950 1 1 0.00 NaN 

und zu versuchen, die Daten zu analysieren.

Antwort

1

Wenn Sie params delim_whitespace=True und übergeben Sie die 3 Spalten in einer Liste parse_dates der letzte Schritt passieren nur die Spaltennamen zu überschreiben:

In [96]: 
import pandas as pd 
import io 
t="""Year Mo Da (01,52) 
1950 1 1 0.00  
1950 1 2 0.00  
1950 1 3 0.05  
1950 1 4 0.00  
1950 1 5 0.07  
1950 1 6 0.07""" 
df =pd.read_csv(io.StringIO(t), delim_whitespace=True, parse_dates=[['Year','Mo','Da']]) 
df.columns = ['Datetime', 'Rainfall'] 
df 

Out[96]: 
    Datetime Rainfall 
0 1950-01-01  0.00 
1 1950-01-02  0.00 
2 1950-01-03  0.05 
3 1950-01-04  0.00 
4 1950-01-05  0.07 
5 1950-01-06  0.07 

So erwarte ich: df = pd.read_csv(csv_fl, delim_whitespace=True, parse_dates=[['Year','Mo','Da']])

sollte gefolgt arbeiten Überschreiben der Spaltennamen

+0

Großartig, danke. Ich werde die Antwort akzeptieren, wenn erlaubt. – N1B4

0
filename = "..." 
>>> pd.read_csv(filename, 
       sep=" ", 
       skipinitialspace=True, 
       parse_dates={'Datetime': [0, 1, 2]}, 
       usecols=[0, 1, 2, 3], 
       names=["Y", "M", "D", "Rainfall"], 
       skiprows=1) 
    Datetime Rainfall 
0 1950-01-01  0.00 
1 1950-01-02  0.00 
2 1950-01-03  0.05 
3 1950-01-04  0.00 
4 1950-01-05  0.07 
5 1950-01-06  0.07 
Verwandte Themen