2015-06-14 15 views
5

Alman tarih formatına sahip bir csv dosyası okuyorum. bu görevde Tamam çalıştı gibi görünüyor:Python ve Pandalarda dd.mm.yyyy ile birlikte csv'yi okuyun

Picking dates from an imported CSV with pandas/python

Ancak tarih gibi tanınmaz benim durumda gibi görünüyor. Test dosyasında hatalı bir dize bulamadım.

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

Bu sonuçlanır

:

screenshot

Yani, tarihleri ​​ile Sütun gibi tanınmaz. Burada yanlış olan ne yapıyorum? Veya bu tarih biçimi sadece uyumlu değil mi?

  • OSX 10.10.3
  • Anaconda Conda 3.13.0
  • Python 3.4.3-0
  • ipython dizüstü 3.1.0

cevap

8

. Bu nedenle , ayrıca index_col=[0] ile endeks olarak ilk sütunu ilan etmek gerekir:

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 

Alternatif olarak, bir dizin olmak Datum sütun istemiyorsanız, açıkça read_csv anlatmak için parse_dates=[0] kullanabilirsiniz tarih ayrıştırmak için dateutil.parser.parse kullanır read_csv kaputun altında

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 

: tarihleri ​​gibi ilk sütunu ayrıştırmak için dizeleri: dateutil.parser yana

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) 

DD.MM.YYYY formatında tarih dizeleri ayrıştırma hiçbir sorun vardır, buradan özel bir tarih ayrıştırıcı beyan etmek gerekmez.

1

bu yardımcı olacaktır olabilir

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

özel bir tarih ayrıştırma işlevini iletmek için read_csv'nin date_parser parametresini kullanın. Eğer parse the index as a date için parse_dates=True sonra read_csv çalışır kullanırsanız ilgili tarih formatı ile strptime sarar ambda)

pandas.read_csv

İlgili konular