pandas.to_datetime 不一致的时间字符串格式[英] pandas.to_datetime inconsistent time string format

本文是小编为大家收集整理的关于pandas.to_datetime 不一致的时间字符串格式的处理方法,想解了pandas.to_datetime 不一致的时间字符串格式的问题怎么解决?pandas.to_datetime 不一致的时间字符串格式问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试使用pandas.to_datetime().

导入熊猫:

In [1]: import pandas as pd

In [2]: pd.__version__
Out[2]: '0.10.1'

创建一个示例数据框:

In [3]: d = {'data' : pd.Series([1.,2.], index=['26/12/2012', '10/01/2013'])}

In [4]: df=pd.DataFrame(d)

查看索引.请注意,日期格式为日/月/年:

In [5]: df.index
Out[5]: Index([26/12/2012, 10/01/2013], dtype=object)

将索引转换为DateTime:

In [6]: pd.to_datetime(df.index)
Out[6]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-12-26 00:00:00, 2013-10-01 00:00:00]
Length: 2, Freq: None, Timezone: None

已经在此阶段,您可以看到每个条目的日期格式的格式都不同.第一个很好,第二个月和一天换了.

这是我要写的,但避免了日期字符串格式不一致:

In [7]: df.set_index(pd.to_datetime(df.index))
Out[7]: 
data
2012-12-26   1
2013-10-01   2

我猜第一个条目是正确的,因为该功能"知道"没有26个月,因此不能选择默认的月/日/年格式.

有其他/更好的方法可以做到吗?我可以将格式传递到to_datetime()函数吗?

谢谢.

编辑:

我找到了一种方法,没有pandas.to_datetime:

import datetime.datetime as dt
date_string_list = df.index.tolist()
datetime_list = [ dt.strptime(date_string_list[x], '%d/%m/%Y') for x in range(len(date_string_list)) ]
df.index=datetime_list

但是有点混乱.欢迎任何改进.

推荐答案

有(隐藏?)dayfirst参数to to_datetime :

In [23]: pd.to_datetime(df.index, dayfirst=True)
Out[23]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-12-26 00:00:00, 2013-01-10 00:00:00]
Length: 2, Freq: None, Timezone: None

在pandas 0.11(以下)中,您可以使用format参数:

In [24]: pd.to_datetime(df.index, format='%d/%m/%Y')
Out[24]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-12-26 00:00:00, 2013-01-10 00:00:00]
Length: 2, Freq: None, Timezone: None

本文地址:https://www.itbaoku.cn/post/1728018.html