2015-06-14 9 views
5

Ich lese eine CSV-Datei mit deutschen Datumsformat. Scheint, wie es funktionierte in diesem Beitrag nicht ok:Lesen Sie CSV mit dd.mm.yyyy in Python und Pandas

Picking dates from an imported CSV with pandas/python

Es scheint jedoch, wie in meinem Fall das Datum nicht als solche erkannt wird. Ich konnte keine falsche Zeichenfolge in der Testdatei finden.

import pandas as pd 
import numpy as np 


%matplotlib inline 
import matplotlib.pyplot as plt 

from matplotlib import style 
from pandas import DataFrame 

style.use('ggplot') 

df = pd.read_csv('testdata.csv', dayfirst=True, parse_dates=True) 
df[:5] 

table

Daraus ergibt sich:

screenshot

die Spalte mit den Daten So wird nicht als solche erkannt. Was mache ich hier falsch? Oder ist dieses Datumsformat einfach nicht kompatibel?

  • OSX 10.10.3
  • Anaconda Conda 3.13.0
  • Python 3.4.3-0
  • ipython notebook 3.1.0

Antwort

8

Wenn Sie parse_dates=True dann read_csv versucht, parse the index as a date verwenden.

In [216]: pd.read_csv('testdata.csv', dayfirst=True, parse_dates=True, index_col=[0]) 
Out[216]: 
      morgens mittags abends 
Datum        
2015-03-16  382  452  202 
2015-03-17  288  467  192 

Alternativ, wenn Sie die Datum Spalte nicht möchten, einen Index sein, Sie parse_dates=[0]read_csv explizit verwenden könnte zu sagen: Daher würden Sie auch die erste Spalte als Index mit index_col=[0] erklären müssen

In [217]: pd.read_csv('testdata.csv', dayfirst=True, parse_dates=[0]) 
Out[217]: 
     Datum morgens mittags abends 
0 2015-03-16  382  452  202 
1 2015-03-17  288  467  192 

Unter der Haube read_csvdateutil.parser.parse verwendet Datum zu analysieren: die erste Spalte als Datumsangaben zu analysieren Strings:

In [218]: import dateutil.parser as DP 

In [221]: DP.parse('16.03.2015', dayfirst=True) 
Out[221]: datetime.datetime(2015, 3, 16, 0, 0) 

Seit dateutil.parser hat keine Probleme Datumszeichenfolgen in DD.MM.YYYY Format parsen, müssen Sie hier nicht einen benutzerdefinierten Datumsparser deklarieren.

1

dies helfen wird, sein kann

from datetime import datetime as dt 
    dtm = lambda x: dt.strptime(str(x), "%d.%m.%Y") 
    df["Datum"] = df["Datum"].apply(dtm) 
2

Verwenden Sie den Parameter date_parser von read_csv, um eine benutzerdefinierte Datumsanalysefunktion zu übergeben (al ambda die strptime mit dem entsprechenden Datumsformat Wraps)

pandas.read_csv