2015-06-14 98 views
5

我正在阅读带有德语日期格式的csv文件。 好像它在这个岗位工作确定:在Python和Pandas中用dd.mm.yyyy阅读csv

Picking dates from an imported CSV with pandas/python

然而,这似乎是在我的情况的日期不承认。 我在测试文件中找不到任何错误的字符串。

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

这导致:

screenshot

所以,随着日期的列没有承认。 我在这里做错了什么? 或者这个日期格式根本不兼容?

  • OSX 10.10.3
  • 蟒蛇畅达3.13.0
  • 的Python 3.4.3-0
  • IPython的笔记本3.1.0

回答

8

如果使用parse_dates=True然后read_csv试图parse the index as a date。 因此,您还需要与index_col=[0]声明的第一列的索引:

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 

另外,如果你不希望Datum列是一个指标,你可以使用 parse_dates=[0]明确地告诉read_csv解析第一列作为日期:

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 

read_csv使用dateutil.parser.parse解析日期罩字符串:

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) 

由于dateutil.parser毫不费力地分析日期字符串中DD.MM.YYYY格式,你不必在这里宣布一个自定义日期解析器。

1

可能,这将有助于

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

使用read_csv的d​​ate_parser参数传递自定义日期解析函数(al ambda与有关日期格式strptime包)

pandas.read_csv