在DataFrame中将Pandas Series转换为DateTime

55

我有一个如下的Pandas DataFrame

        ReviewID       ID      Type               TimeReviewed
205     76032930  51936827  ReportID 2015-01-15 00:05:27.513000
232     76032930  51936854  ReportID 2015-01-15 00:06:46.703000
233     76032930  51936855  ReportID 2015-01-15 00:06:56.707000
413     76032930  51937035  ReportID 2015-01-15 00:14:24.957000
565     76032930  51937188  ReportID 2015-01-15 00:23:07.220000

>>> type(df)
<class 'pandas.core.frame.DataFrame'>

TimeReviewed 是一种系列类型

>>> type(df.TimeReviewed)
<class 'pandas.core.series.Series'>

我已经尝试了下面的方法,但仍然无法更改Series类型。

import pandas as pd
review = pd.to_datetime(pd.Series(df.TimeReviewed))
>>> type(review)
<class 'pandas.core.series.Series'>

我怎样才能将df.TimeReviewed更改为DateTime类型,并将年、月、日、小时、分钟和秒分别提取出来呢?我有点新手,感谢您的帮助。

3个回答

80

你不能: DataFrame列根据定义是Series。 话虽如此,如果您使dtype(所有元素的类型)类似于日期时间,则可以通过.dt访问器(文档)访问所需的数量:

>>> df["TimeReviewed"] = pd.to_datetime(df["TimeReviewed"])
>>> df["TimeReviewed"]
205  76032930   2015-01-24 00:05:27.513000
232  76032930   2015-01-24 00:06:46.703000
233  76032930   2015-01-24 00:06:56.707000
413  76032930   2015-01-24 00:14:24.957000
565  76032930   2015-01-24 00:23:07.220000
Name: TimeReviewed, dtype: datetime64[ns]
>>> df["TimeReviewed"].dt
<pandas.tseries.common.DatetimeProperties object at 0xb10da60c>
>>> df["TimeReviewed"].dt.year
205  76032930    2015
232  76032930    2015
233  76032930    2015
413  76032930    2015
565  76032930    2015
dtype: int64
>>> df["TimeReviewed"].dt.month
205  76032930    1
232  76032930    1
233  76032930    1
413  76032930    1
565  76032930    1
dtype: int64
>>> df["TimeReviewed"].dt.minute
205  76032930     5
232  76032930     6
233  76032930     6
413  76032930    14
565  76032930    23
dtype: int64

如果你被困在使用旧版本的pandas中,你总是可以手动访问各种元素(再次将其转换为日期时间类型的序列)。虽然速度会变慢,但有时这并不是问题:

>>> df["TimeReviewed"].apply(lambda x: x.year)
205  76032930    2015
232  76032930    2015
233  76032930    2015
413  76032930    2015
565  76032930    2015
Name: TimeReviewed, dtype: int64

1
我无法使用.dt,它给了我一个错误:AttributeError: 'Series' object has no attribute 'dt' - 1EnemyLeft
@user3596895:你可能正在使用较旧版本的pandas。print(pd.version.version)会输出什么? - DSM
@user3596895:是时候升级了。 :-) - DSM
我明白了,我正在使用Visual Studio Python工具导入pandas,我会查找如何更新我的pandas版本,谢谢! - 1EnemyLeft

4
df=pd.read_csv("filename.csv" , parse_dates=["<column name>"])

type(df.<column name>)

示例:如果您想在Pandas中将起始为字符串的日期转换为时间戳

df=pd.read_csv("weather_data2.csv" , parse_dates=["day"])

type(df.day)

输出结果将是 pandas.tslib.Timestamp

嗨,如果我需要解析两列的日期怎么办?我尝试过的所有方法都似乎不起作用。 - Arti Agarwal

2

一些方便的脚本:

hour = df['assess_time'].dt.hour.values[0]

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