2015-04-17 97 views
1

我有一個DataFrame,其中的日期格式爲ddmmyy(例如08JUN14)。我無法弄清楚如何格式化它以用作matplotlib圖的x軸。從實驗我明白,我需要一個字符串,因爲:在matplotlib中使用dataframe日期列

datetime.strptime(「01Jul76」, ,"%d%b%y") 
datetime.datetime(1976, 7, 1, 0, 0) 

我不理解的是如何格式化/使用整個DataFrame列?我試圖將整列轉換爲一個字符串,但顯然不正確(我認爲看到錯誤信息後有意義)。

s = str(df.date) 
d = datetime.strptime(s,"%d%b%y") 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Anaconda\lib\_strptime.py", line 325, in _strptime 
    (data_string, format)) 
ValueError: time data "('01Jul76', '01Sep76', … '15Jan15', '19Mar15')" does not match format '%d%b%y'. 

我已搜查,看到這個問題的參考,但我似乎沒有在任何地方獲得。任何指導非常感謝。

+0

可以嘗試'DF [「日期」] = pd.to_datetime(DF [「日期」])' – EdChum

+0

我認爲你的錯誤是,你想轉換的一系列字符串轉換爲日期時間對象,這將無法正常工作錯誤顯示您嘗試con一個長字符串:''01Jul76','01Sep76',...'15Jan15','19Mar15'',所以這不會匹配''%d%b%y''這是期望單個字符串轉換 – EdChum

回答

1

它看起來像你想的一些字符串轉換成datetime對象,但你不能傳遞一個熊貓系列以datetime.strptime,因爲這會引發錯誤:

In [2]: 

df = pd.DataFrame({'date':['01Jul76', '01Sep76', '15Jan15', '19Mar15']}) 
df 
Out[2]: 
     date 
0 01Jul76 
1 01Sep76 
2 15Jan15 
3 19Mar15 
In [4]: 

import datetime as dt 
dt.datetime.strptime(str(df['date']),"%d%b%y") 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-4-d1c7711603e3> in <module>() 
     1 import datetime as dt 
----> 2 dt.datetime.strptime(str(df['date']),"%d%b%y") 

C:\WinPython-64bit-3.4.3.1\python-3.4.3.amd64\lib\_strptime.py in _strptime_datetime(cls, data_string, format) 
    498  """Return a class cls instance based on the input string and the 
    499  format string.""" 
--> 500  tt, fraction = _strptime(data_string, format) 
    501  tzname, gmtoff = tt[-2:] 
    502  args = tt[:6] + (fraction,) 

C:\WinPython-64bit-3.4.3.1\python-3.4.3.amd64\lib\_strptime.py in _strptime(data_string, format) 
    335  if not found: 
    336   raise ValueError("time data %r does not match format %r" % 
--> 337       (data_string, format)) 
    338  if len(data_string) != found.end(): 
    339   raise ValueError("unconverted data remains: %s" % 

ValueError: time data '0 01Jul76\n1 01Sep76\n2 15Jan15\n3 19Mar15\nName: date, dtype: object' does not match format '%d%b%y' 

最簡單的就是用to_datetime和通過您的格式字符串:

In [7]: 

df['date'] = pd.to_datetime(df['date'], format='%d%b%y') 
df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 4 entries, 0 to 3 
Data columns (total 1 columns): 
date 4 non-null datetime64[ns] 
dtypes: datetime64[ns](1) 
memory usage: 64.0 bytes 
In [8]: 

df 
Out[8]: 
     date 
0 1976-07-01 
1 1976-09-01 
2 2015-01-15 
3 2015-03-19 
+0

感謝你的幫助! to_datetime是我所需要的。 – mknowles