【问题标题】:Can you use datetime.strptime without knowing the format?你可以在不知道格式的情况下使用 datetime.strptime 吗?
【发布时间】:2013-05-26 06:55:51
【问题描述】:

我正在编写一个需要 3 个熊猫系列的函数,其中一个是日期,我需要能够将其转换为数据框,以便我可以对其进行重新采样。问题在于,当我简单地执行以下操作时:

>>> data.index = data.time
>>> df = data.resample('M')

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/generic.py", line 234, in resample
    return sampler.resample(self)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/tseries/resample.py", line 100, in resample
    raise TypeError('Only valid with DatetimeIndex or PeriodIndex')
TypeError: Only valid with DatetimeIndex or PeriodIndex

我知道这是因为即使索引类型是日期时间对象,在进行重采样时,除非它采用datetime(x,x,x,x,x,x) 的形式,否则它不会正确读取它。

所以当我使用它时,我的日期数据是这样的:2011-12-16 08:09:07,所以我一直在做以下事情:

dates = data.time
date_objects = [datetime.strptime(dates[x], '%Y-%m-%d %H:%M:%S') for x in range(len(dates))]
data.index = date_objects 
df = data.resample('M')

我的问题是我将它用于开源,我不知道输入日期时的格式。

所以我的问题是:如何在不知道字符串格式的情况下将带有日期和时间的字符串转换为日期时间对象?

【问题讨论】:

  • 如果你不知道字符串的格式,你怎么知道02-01-2013是二月一日还是一月二日? IOW,你必须对格式做出一些假设。

标签: python datetime pandas


【解决方案1】:

您可以为此目的使用 dateutil

from dateutil import parser
yourdate = parser.parse(dates[x])

【讨论】:

  • 确实做到了,而且很棒,但确实导致了额外的导入,因此我认为我现在接受的答案更好
【解决方案2】:

Pandas 有一个 to_datetime 函数用于此目的,当应用于系列时,它将值转换为时间戳而不是日期时间:

data.time = pd.to_datetime(data.time)

df = data.set_index('time')

地点:

In [2]: pd.to_datetime('2011-12-16 08:09:07')
Out[2]: datetime.datetime(2011, 12, 16, 8, 9, 7)

In [3]: s = pd.Series(['2011-12-16 08:09:07'])

In [4]: pd.to_datetime(s)
Out[4]:
0   2011-12-16 08:09:07
dtype: datetime64[ns]

【讨论】:

  • 太棒了!快速提问...如果 data.time 已经在 datetime 中,这会产生错误还是仍然有效?
猜你喜欢
  • 1970-01-01
  • 2012-02-08
  • 2020-09-29
  • 2013-11-14
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
相关资源
最近更新 更多