简体   繁体   English

将 Pandas 系列转换为 DataFrame 中的 DateTime

[英]Convert Pandas Series to DateTime in a DataFrame

I have a Pandas DataFrame as below我有一个如下所示的 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 is a series type TimeReviewed 是一个系列类型

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

I've tried below, but it still doesn't change the Series type我在下面尝试过,但它仍然没有改变系列类型

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

How can I change the df.TimeReviewed to DateTime type and pull out year, month, day, hour, min, sec separately?如何将 df.TimeReviewed 更改为 DateTime 类型并分别提取年、月、日、小时、分钟、秒? I'm kinda new to python, thanks for your help.我对 python 有点陌生,谢谢你的帮助。

You can't: DataFrame columns are Series , by definition.您不能:根据定义, DataFrame列是Series That said, if you make the dtype (the type of all the elements) datetime-like, then you can access the quantities you want via the .dt accessor ( docs ):也就是说,如果您使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

If you're stuck using an older version of pandas , you can always access the various elements manually (again, after converting it to a datetime-dtyped Series).如果您坚持使用旧版本的pandas ,您始终可以手动访问各种元素(再次将其转换为日期时间类型的系列之后)。 It'll be slower, but sometimes that isn't an issue:它会更慢,但有时这不是问题:

>>> 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
df=pd.read_csv("filename.csv" , parse_dates=["<column name>"])

type(df.<column name>)

example: if you want to convert day which is initially a string to a Timestamp in Pandas示例:如果您想将最初是字符串的日期转换为 Pandas 中的时间戳

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

type(df.day)

The output will be pandas.tslib.Timestamp输出将是pandas.tslib.Timestamp

一些方便的脚本:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM