【问题标题】:How do I get pd.to_datetime() to take in multiple date formats?如何让 pd.to_datetime() 采用多种日期格式?
【发布时间】:2020-09-04 13:13:36
【问题描述】:

我正在努力让pd.to_datetime() 接受多种日期格式并解析它们。我认为它以不同但相似的格式接收日期,但它似乎没有这样做。以下是两个基本示例:

9/3/2020
9/2/20

这是我的脚本:

    try:
        datetime.datetime.strptime(row['assignment_name'][:row['assignment_name'].find(' ')], "%m/%d/%y")
        due_date = row['assignment_name'][:row['assignment_name'].find(' ')]
        print(due_date)
        data_normalized.at[index, 'due_date'] = pd.to_datetime(due_date, format='%m/%d%y', errors='ignore')
    except ValueError as err:
        data_normalized.at[index, 'due_date'] = None
        print(err)
        continue

它可以很好地读取较短的格式并对其进行解析,但在较长的日期格式上会抛出此错误:unconverted data remains: 20

我知道我可以稍微清理一下数据以摆脱全年,但是有没有办法在 pandas 函数中添加多个格式参数?或者以多种格式阅读的替代解决方案是什么?

【问题讨论】:

  • 为什么不先尝试转换日期值,然后通过pd.to_datetime() 运行这些值?
  • 它不可能添加多种格式,您必须清理一种格式的数据。因为,如果 Datetime 支持多种格式,函数会被混淆以获取正确的格式值。
  • to_datetime 函数适用于您提供的两个日期(pandas 1.0)。 pd.to_datetime(['9/3/2020', '9/2/20'], errors='coerce') gives DatetimeIndex(['2020-09-03', '2020-09-02'], dtype='datetime64[ns]', freq=None)。也许我错过了一些元素。

标签: python pandas


【解决方案1】:

Pandas 的原生日期解析相当灵活。我曾多次以您提供的格式解析日期,并且成功了。

如果我做一个玩具例子:

df = pd.DataFrame(['9/3/2020', '9/3/20'], columns=['a'])
pd.to_datetime(df.a)

# Output
0   2020-09-03
1   2020-09-03
Name: a, dtype: datetime64[ns]

一切正常。我注意到你有format='%m/%d%y'。这对我来说看起来不对(你的意思是%m/%d/%y?)。如果您实际上只是将format 一起删除,pandas 会自动将其拾取。

【讨论】:

  • 谢谢,这行得通。我还有 , errors='ignore' 参数,它忽略了我试图捕获的所有解析问题,因此删除它有帮助。
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
相关资源
最近更新 更多