如何使格式与我的时间数据匹配?

时间:2017-03-13 21:12:38

标签: python datetime

我想用数据框制作一些图表,我将其作为.csv文件读入python。日期格式为1-Jan但是当我尝试使用以下行转换日期时间时:

metdata['Date']=metdata['Date'].apply(lambda x: pd.to_datetime(str(x), format='%d-%MMM'))

它抛出了这个错误:

  

ValueError:时间数据' 1-Jan'不符合格式'%d-%MMM' (匹配)

我无法弄清楚为什么数据与格式不匹配。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

pandas中3个字母月的正确格式为%b,因此

metdata['Date']=metdata['Date'].apply(lambda x: pd.to_datetime(str(x), format='%d-%b'))

如果您没有年份,它将自动添加为1900

答案 1 :(得分:0)

pandas使用与datetime相同的字符串格式(使用C' s strftime)。您可以阅读更多here

格式化指令在%之后不能有多个字母。我想你想要%d-%b

In [52]: datetime.datetime.strptime('1-Jan', '%d-%MMM')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-52-946e04d8e511> in <module>()
----> 1 datetime.datetime.strptime('1-Jan', '%d-%MMM')

C:\Users\colinc719\Miniconda2\lib\_strptime.pyc in _strptime(data_string, format)
    330     if not found:
    331         raise ValueError("time data %r does not match format %r" %
--> 332                          (data_string, format))
    333     if len(data_string) != found.end():
    334         raise ValueError("unconverted data remains: %s" %

ValueError: time data '1-Jan' does not match format '%d-%MMM'

In [53]: datetime.datetime.strptime('1-Jan', '%d-%b')
Out[53]: datetime.datetime(1900, 1, 1, 0, 0)