python - 如何解析pandas中不规则的日期格式?

标签 python pandas date

我正在解析一个日期列,其中包含 pandas 无法解释的不规则日期格式。日期包括表示日、月和年的不同语言以及不同的格式。日期条目通常还包括时间戳。 (奖励:用 lambda/循环通过字符串/正则表达式分隔它们是最快的方法吗?)处理这数万个日期条目的最佳选项和工作流程是什么?

pandas 和 dateutil.parser 未知的条目。

示例包括:

19.8.2017, 21:23:32 
31/05/2015 19:41:56   
Saturday, 18. May  
11 - 15 July 2001 
2019/4/28 下午6:29:28 
1 JuneMay 2000    
19 aprile 2008 21:16:37 GMT+02:00 
Samstag, 15. Mai 2010 20:55:10   
So 23 Jun 2007 23:45 CEST                                       
28 August 1998                                                 
30 June 2001    
1 Ноябрь 2008 г. 18:46:59  
Sat Jun 18 2011 19:46:46 GMT+0200 (Romance Daylight Time) 
May-28-11 6:56:08 PM
Sat Jun 26 2010 21:55:54 GMT+0200 (West-Europa (zomertijd))
lunedì 5 maggio 2008 9.30.33 

"ValueError: ('Unknown string format:', '1 JuneMay 2000')"

我意识到这可能是一项繁琐且不受欢迎的任务。幸运的是,这些日期目前对我的项目来说并不重要,因此它们可能会被保留,但解决方案将是有利的。感谢您的任何回复,谢谢。

最佳答案

逐行,你的很多日期都有效:

>>> pd.to_datetime('19.8.2017, 21:23:32')
Timestamp('2017-08-19 21:23:32')

但是还有很多问题:

  • 由于您的格式不规则,pandas 无法猜测 01-02-2019 是 2019 年 2 月 1 日还是 2019 年 1 月 2 日,我不知道您是否可以,
  • 您的一些示例无法转换为日期五月 18 日星期六:哪一年?
  • 有不同语言的月份和日期(aprile 似乎是意大利语,Samstag 是德语)
  • 您的一些示例无需括号内容即可运行:
>>> pd.to_datetime('Sat Jun 18 2011 19:46:46 GMT+0200')  # works
Timestamp('2011-06-18 19:46:46-0200', tz='pytz.FixedOffset(-120)')

>>> pd.to_datetime('Sat Jun 18 2011 19:46:46 GMT+0200 (Romance Daylight Time) ')  # doesn't work.
...
ValueError: ('Unknown string format:', 'Sat Jun 18 2011 19:46:46 GMT+0200 (Romance Daylight Time) ')

可以肯定的是,您不能将所有日期都放入时间戳中,我会尝试创建一个新列,其中包含时间戳中正确解析的日期,并将另一个保存为 NaT

例如:

date
02-01-2019
Saturday, 18. May

将变成:

date               new date
02-01-2019         Timestamp('2019-01-02 00:00:00.00)
Saturday, 18. May  NaT

为此,我将删除初始列中的括号:

df2 = df.assign(
    date2=lambda x: x['date'].str.split('(')[0],
    new_date=lambda x: x['date2'].apply(lambda y: pd.to_datetime(y, errors='coerce'), axis='columns')) # apply the function row by row
# This will work with python >= 3.6

之后,您可以看到保留 NaT 值还剩下什么。

翻译时,可以尝试替换单词,但会很长。

这确实很慢(由于逐行应用),但如果您的数据不一致,您就无法直接在列上工作。

希望对您有所帮助。

关于python - 如何解析pandas中不规则的日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57191952/

相关文章:

python - 合并 Pandas 中的几个数据透视表

Python - 如何识别 OHLC 数据集中的数字范围?

api - 具体日期的天气?

python - 使用 python asyncore 从套接字读取固定数量的字节

python - 如何在不通过 API Gateway 和 Authorizer 的情况下直接从另一个 Lambda 调用 Chalice Lambda?

python - 将具有多个键的Python字典映射到具有多列匹配键的数据框

python - 当我写入 CSV 时,如何隐藏 pandas to_datetime NaT?

php - 格式化日期 (PHP)

python - Flask Debug模式停留在 "Restarting with stat"

python - 加入多索引的pandas系列