2016-08-02 7 views
0

Ich habe die folgende csv, wie test.txt gespeichert:Wie 01-Jan-01 Termine in Pandas von csv erkennen

title, arbitrarydate, value 
hello, 01-Jan-01, 314159 

den folgenden Code ausgeführt wird

dataframe = pd.read_csv('pandatestcsv.txt', parse_dates = True) 
print dataframe.dtypes 

gibt diese Ausgabe

title   object 
arbitrarydate object 
value    int64 
dtype: object 

Warum erkennt Pandas nicht, dass ein beliebiges Datum eine Datumsspalte ist? Wie kann ich es richtig analysieren lassen? Ich möchte, dass das arbitrarydate eine Datumsspalte für mich ist, ich möchte nicht im Voraus angeben, welche Spalten Datumsangaben enthalten.

+0

Ist es möglich, diese Arbeit ohne Angabe zu machen, welche Spalten Daten im Voraus enthalten ? –

Antwort

0

Für mich funktioniert:

import pandas as pd 
import io 

temp=u"""title,arbitrarydate,value 
hello,01-Jan-01,314159""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), parse_dates=['arbitrarydate']) 
print (df) 
    title arbitrarydate value 
0 hello 2001-01-01 314159 

print (df.dtypes) 
title     object 
arbitrarydate datetime64[ns] 
value      int64 
dtype: object 

Eine andere Lösung ist Position der Spalte als Parameter parse_dates hinzufügen:

df = pd.read_csv(io.StringIO(temp), parse_dates=[1]) 
print (df) 
    title arbitrarydate value 
0 hello 2001-01-01 314159 

print (df.dtypes) 
title     object 
arbitrarydate datetime64[ns] 
value      int64 
dtype: object 

Docs.

Sie können alle Spalten in parse_dates angeben, aber es ist gefährlich, denn manchmal können einige Zahlen als Datetimes analysiert werden, zum Beispiel:

import pandas as pd 
import io 

temp=u"""title,arbitrarydate,value 
hello,01-Jan-01,2000""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), parse_dates = [0,1,2]) 
print (df) 
    title arbitrarydate  value 
0 hello 2001-01-01 2000-01-01 

print (df.dtypes) 
title     object 
arbitrarydate datetime64[ns] 
value   datetime64[ns] 
dtype: object 
+0

Ist es möglich, dass dies funktioniert, ohne vorher zu spezifizieren, welche Spalten Datumsangaben enthalten? –

+1

Ich denke nein, 'parse_dates = True 'wird verwendet, wenn datetimeindex analysiert werden muss. – jezrael

Verwandte Themen