【问题标题】:Make date column into standard format using pandas使用 pandas 将日期列转换为标准格式
【发布时间】:2019-06-17 10:13:01
【问题描述】:

如何使用 pandas 将日期列转换为标准格式,即 12-08-1996。我拥有的数据是:

我通过在线搜索尝试了一些方法,但没有找到一种可以检测格式并使其成为标准的方法。

这是我编写的代码:

df = pd.read_excel(r'date cleanup.xlsx')
df.head(10)
df.DOB = pd.to_datetime(df.DOB) #Error is in this line

我得到的错误是:

ValueError: ('未知字符串格式:', '20\ \december\ \1992')

更新: 使用

for date in df.DOB:
    print(parser.parse(date))

效果很好,但是有一个值 20\\december \\1992 它会给出上面突出显示的错误。所以我不熟悉数据中的所有格式,这就是为什么我一直在寻找一种可以自动检测并将其转换为标准格式的技术。

【问题讨论】:

  • from dateutil import parser , parser.parse('17th Jun')datetime.datetime(2019, 6, 17, 0, 0) ,如果不起作用,请提供创建df的代码
  • @anky_91 这很好用,但有一些像20\\december\\1992 这样的字符串会发生错误。

标签: python pandas datetime


【解决方案1】:

您可以使用dateparser 库:

import dateparser

df = pd.DataFrame(["12 aug 1996", "24th december 2006", "20\\ december \\2007"], columns = ['DOB'])
df['date'] = df['DOB'].apply(lambda x :dateparser.parse(x))

输出

|   |        DOB         |    date    |
|---|--------------------|------------|
| 0 | 12 aug 1996        | 1996-08-12 |
| 1 | 24th december 2006 | 2006-12-24 |
| 2 | 20\ december \2007 | 2020-12-07 |

编辑

注意,有一个STRICT_PARSING 设置可用于处理异常:

您也可以通过设置 STRICT_PARSING 完全忽略解析不完整的日期

df['date'] = df['DOB'].apply(lambda x : dateparser.parse(x, settings={'STRICT_PARSING': True}) if len(str(x))>6 else None)

【讨论】:

  • 我收到一个错误:TypeError: Input type must be str or unicode
  • df.dtypes 给了什么?
  • 导入excel文件时试试pd.read_excel(r'date cleanup.xlsx', converters={'DOB':str})
  • df.dtypes 显示 DOB 的类型是 DOB object 并且输入 pd.read_excel(r'date cleanup.xlsx', converters={'DOB':str}) 给出了相同的错误。
  • 并将dateparser.parse(x) 替换为dateparser.parse(str(x))DOB 的格式有问题,但如果没有文件就无法确定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多