2015-06-14 145 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