在pandas中将数据转换为日期时间格式?

3

我需要帮助将日期时间转换为python/pandas格式。例如,我的时间保存在以下行中:

2017-01-01 05:30:24.468911+00:00
.....
2017-05-05 01:51:31.351718+00:00

我想知道将此转换为日期时间格式的最简单方法,以便执行与时间有关的操作(例如,我的数据集的天数范围是多少,以时间为基础将数据集拆分成块,一个时间到另一个时间的时间差是多少)?如果这样做可以使事情更容易,我不介意失去一些时间的重要性。非常感谢!


1
你是将它们保存为字符串吗?如果是这样,你可以使用 strptime() 将所指示的时间拆分成一个对象,并对这些对象的成员进行操作。对象的成员将由您传递到该方法中的格式化字符串来确定。有关更多信息,请参见此文档 - nerdenator
是的,它们保存为字符串。抱歉没有说明清楚。我会尝试使用strptime()。谢谢! - Jane Sully
3个回答

2
假设我有两个字符串2017-06-061944-06-06,我想要获取它们之间的差异(Python中称为timedelta)。首先,我需要导入datetime模块。然后,我需要将这两个字符串转换成datetime对象:
>>> a = datetime.datetime.strptime('2017-06-06', '%Y-%m-%d')
>>> b = datetime.datetime.strptime('1944-06-06', '%Y-%m-%d')

这将给我们两个日期时间对象,可以用于算术函数,返回一个 timedelta 对象:

>>> c = abs((a-b).days)

这将给我们26663,而daystimedelta支持的最大分辨率:文档


2
"Timestamp会为您进行转换。"
>>> pd.Timestamp('2017-01-01 05:30:24.468911+00:00')
Timestamp('2017-01-01 05:30:24.468911+0000', tz='UTC')

假设您有一个包含时间戳列的数据框(我们称其为stamp),您可以在该列上使用applyTimestamp函数:
df = pd.DataFrame(
    {'stamp': ['2017-01-01 05:30:24.468911+00:00',
               '2017-05-05 01:51:31.351718+00:00']})
>>> df
    stamp
0   2017-01-01 05:30:24.468911+00:00
1   2017-05-05 01:51:31.351718+00:00

>>> df['stamp'].apply(pd.Timestamp)
0   2017-01-01 05:30:24.468911+00:00
1   2017-05-05 01:51:31.351718+00:00
Name: stamp, dtype: datetime64[ns, UTC]

您也可以使用 时间序列:
>>> pd.TimeSeries(df.stamp)
0    2017-01-01 05:30:24.468911+00:00
1    2017-05-05 01:51:31.351718+00:00
Name: stamp, dtype: object

一旦你有了一个时间戳对象,它就非常高效易用。例如,你可以直接计算它们之间的差值。
你可能还想看看这个SO答案,它讨论了如何将时区不明确的值变成明确的值。

1
由于有“Pandas”标签存在:
df = pd.DataFrame(['2017-01-01 05:30:24.468911+00:00'])
df.columns = ['Datetime']
df['Datetime'] = pd.to_datetime(df['Datetime'], format='%Y-%m-%d %H:%M:%S.%f', utc=True)
print(df.dtypes)

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