在 DataFrame 中将 Pandas 系列转换为 DateTime
Posted
技术标签:
【中文标题】在 DataFrame 中将 Pandas 系列转换为 DateTime【英文标题】:Convert Pandas Series to DateTime in a DataFrame 【发布时间】:2015-03-23 20:33:20 【问题描述】:我有一个如下所示的 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'>
我在下面尝试过,但它仍然没有改变系列类型
import pandas as pd
review = pd.to_datetime(pd.Series(df.TimeReviewed))
>>> type(review)
<class 'pandas.core.series.Series'>
如何将 df.TimeReviewed 更改为 DateTime 类型并分别提取年、月、日、小时、分钟、秒? 我对python有点陌生,感谢您的帮助。
【问题讨论】:
【参考方案1】:您不能:根据定义,DataFrame
列是 Series
。也就是说,如果您使dtype
(所有元素的类型)类似于日期时间,那么您可以通过.dt
访问器(docs)访问您想要的数量:
>>> 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
时遇到问题,您可以随时手动访问各种元素(同样,在将其转换为 datetime-dtyped 系列之后)。它会更慢,但有时这不是问题:
>>> 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
【讨论】:
我无法使用.dt
它给我一个错误:AttributeError: 'Series' object has no attribute 'dt'
@user3596895:您可能使用的是旧版本的熊猫。 print(pd.version.version)
给了什么?
@user3596895:那么是时候升级了。 :-)
我明白了,我正在使用visual studio python 工具导入pandas,将查找如何更新我的pandas 版本,谢谢!【参考方案2】:
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
【讨论】:
嗨,如果我必须解析两列的日期怎么办?我尝试过的任何方法似乎都不起作用。【参考方案3】:一些方便的脚本:
hour = df['assess_time'].dt.hour.values[0]
【讨论】:
以上是关于在 DataFrame 中将 Pandas 系列转换为 DateTime的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pandas 中将两个 DataFrame 堆叠在一起?
如何在 Pandas 中将 DataFrame 的行迭代为 Series?
如何在 Streamlit 中将 Pandas DataFrame 下载到 CSV 文件
python - 如何在Python中将pandas DataFrame与None进行比较?