【问题标题】:String to date in pandas大熊猫中的迄今为止的字符串
【发布时间】:2022-01-04 07:05:32
【问题描述】:

我有一个日期编码为字符串的数据集,格式为 %B %d, %Y,例如 2021 年 9 月 10 日。

使用:df['sale_date'] = pd.to_datetime(df.sale_date, format = '%B %d, %Y')

产生这个错误ValueError: time data 'September 10, 2021' does not match format '%B %d, %Y' (match)

使用 strptimedatetime.strptime('September 10, 2021', '%B %d, %Y') 手动检查会生成正确的日期时间对象。

我在 pd.to_datetime 中有什么遗漏吗?

谢谢。

【问题讨论】:

  • 我认为您的 df 中有一些带有字符串 September 10, 2021 的隐藏字符。修复那些。对我来说,您的代码运行良好。

标签: python pandas datetime


【解决方案1】:

经过进一步调查,我发现该错误仅发生在系列的第一个元素上。似乎该字符串已添加 '\ufeff'。所以我刚刚做了一个series.str.replace(),现在它正在工作。抱歉打扰了。问题是 BOM 是如何出现的?

【讨论】:

    【解决方案2】:

    很可能您必须先消除一些空格!

    如果我在开头、结尾或两者都添加空格..

    datestring = ' September 10, 2021 '
    
    datetime.datetime.strptime(datestring, '%B %d, %Y')
    

    这将导致与您相同的错误消息..

    ValueError: time data ' September 10, 2021 ' does not match format '%B %d, %Y'
    

    作为单值使用的解决方案:

    datestring = ' September 10, 2021 '
    datestring.strip()
    

    对于数据框中的列使用:

    dummy = pd.DataFrame(columns={'Date'}, data = [' September 10, 2021 ', ' September 11, 2021 ', ' September 12, 2021 '])
    dummy.Date = dummy.Date.apply(lambda x: x.strip())
    

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多