熊猫解析非英语字符串日期

时间:2016-12-09 00:50:55

标签: python pandas

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")
  

ValueError:未知的字符串格式

理想情况下,有一种方法可以直接在pd.read_csv中完成。

2 个答案:

答案 0 :(得分:0)

有一个名为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)

答案 1 :(得分:0)

如果您设置适当的语言环境并设置解析格式,它也能正常工作:

>> import urllib.request
>> urllib.request.urlretrieve("https://IP/myFile.txt", "myFile.txt")