【问题标题】:Convert Pandas Series to DateTime in a DataFrame在 DataFrame 中将 Pandas 系列转换为 DateTime
【发布时间】: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有点陌生,感谢您的帮助。

【问题讨论】:

    标签: python datetime pandas dataframe


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 2019-11-28
      • 2018-02-02
      • 2015-01-02
      相关资源
      最近更新 更多