Pandas解析非英语字符串日期

11

Pandas 的强项之一是处理英文日期字符串:

In [1]: pd.to_datetime("11 January 2014 at 10:50AM")
Out[1]: Timestamp('2014-01-11 10:50:00')

我想知道在使用pandas处理另一种语言(例如法语)字符串时,是否有更简单的方法来做同样的事情:

In [2]: pd.to_datetime("11 Janvier 2016 à 10:50")

值错误:未知的字符串格式

理想情况下,在pd.read_csv中会有一种直接处理它的方法。

2个回答

15

有一个名为dateparser的模块,它能够处理包括法语、俄语、西班牙语、荷兰语等在内的多种语言,超过20种。 它还可以识别像时区缩写等内容。

让我们确认它可以处理单个日期:

In [1]: import dateparser
        dateparser.parse('11 Janvier 2016 à 10:50')
Out[1]: datetime.datetime(2016, 1, 11, 10, 50)

继续解析此test_dates.csv文件:

               Date  Value
0    7 janvier 1983     10
1  21 décembre 1986     21
2    1 janvier 2016     12

你实际上可以使用dateparser.parse作为解析器:

In [2]: df = pd.read_csv('test_dates.csv',
                         parse_dates=['Date'], date_parser=dateparser.parse)
        print(df)

Out [2]:
        Date  Value
0 1983-01-07     10
1 1986-12-21     21
2 2016-01-01     12

显然,如果您已经加载了数据框,而需要在此之后执行此操作,则可以始终使用apply或map:

# Using apply (6.22 ms per loop)
df.Date = df.Date.apply(lambda x: dateparser.parse(x))

# Or map which is slightly slower (7.75 ms per loop)
df.Date = df.Date.map(dateparser.parse)

2
它也可以正常工作,如果您设置了适当的语言环境并设置了解析格式:
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR')

import pandas as pd
pd.to_datetime("11 Janvier 2016 à 10:50", format='%d %B %Y à %H:%M')
# Timestamp('2016-01-11 10:50:00')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接