【问题标题】:How do I make the format match my time data?如何使格式与我的时间数据匹配?
【发布时间】:2017-03-13 21:12:38
【问题描述】:

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

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

它会抛出这个错误:

ValueError:时间数据“1-Jan”与格式“%d-%MMM”不匹配(匹配)

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

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    pandas 使用与datetime 相同的字符串格式(使用C 的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)
    

    【讨论】:

    • 这将错误更改为: ValueError: day is out of range for month 我假设是因为 %d 根据您附加的链接要求“零填充十进制数”。我想我需要将日期转换为两位数?
    • 导致它失败的字符串是什么?
    • 啊,闰日在错误的年份。非常锋利,蟒蛇。感谢您的帮助!
    【解决方案2】:

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

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

    如果没有年份,则会自动添加为 1900

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 2017-11-04
      • 1970-01-01
      • 2021-12-08
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多