python - pandas.to_datetime 时间字符串格式不一致

标签 python datetime pandas

我正在尝试使用 pandas.to_datetime()pandas.DataFrame 的索引从字符串格式转换为日期时间索引。

导入 Pandas :

In [1]: import pandas as pd

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

创建一个示例 DataFrame:

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)

将索引转换为日期时间:

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

但是有点乱。欢迎任何改进。

最佳答案

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

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

关于python - pandas.to_datetime 时间字符串格式不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15929861/

相关文章:

python - 如何将异步 on_message 函数与 python web 套接字客户端库一起使用?

python - 在 matplotlib 颜色图中选择起始颜色

c# - 如何将字符串转换为 DateTime as UTC 就这么简单

r - 处理我们切换到夏令时和返回的日期

python - 尝试对 pandas 数据帧执行 fill() 时出现 IndexError

python - 使用分区计算 Pandas 中条目之间的增量

python - Zope 中 Python 脚本的 i18n(受限 python)

javascript - 使用 Javascript 将偏移量/本地时间添加到 UTC 日期/字符串

python - 在 pandas 中检查一个数据帧与另一个数据帧的值的快速方法

python - pyssh 0.3 的新副本中存在语法错误? (PYTHON)