【问题标题】:python pandas time series year extractionpython pandas时间序列年份提取
【发布时间】:2015-05-13 10:58:33
【问题描述】:

我有一个包含时间戳的 DF:

0     2005-08-31 16:39:40
1     2005-12-28 16:00:34
2     2005-10-21 17:52:10
3     2014-01-28 12:23:15
4     2014-01-28 12:23:15
5     2011-02-04 18:32:34
6     2011-02-04 18:32:34
7     2011-02-04 18:32:34

我想从每个时间戳中提取年份,在 DF 中创建额外的列,如下所示:

0     2005-08-31 16:39:40 2005
1     2005-12-28 16:00:34 2005
2     2005-10-21 17:52:10 2005
3     2014-01-28 12:23:15 2014
4     2014-01-28 12:23:15 2014
5     2011-02-04 18:32:34 2011
6     2011-02-04 18:32:34 2011
7     2011-02-04 18:32:34 2011

显然,我可以检查所有删除日期前 4 个字符的 DF 条目。这非常慢。我想知道是否有一种快速的 python 方式来做到这一点。 我看到可以通过 DF = pd.to_datetime(DF,'%Y-%m-%d %H:%M:%S') 将列转换为日期时间格式,但是当我尝试应用日期时间时。 datetime.year(DF) 它不起作用。我还需要将时间戳解析为月份和年月的组合等等...... 请帮忙。 谢谢。

【问题讨论】:

    标签: python parsing datetime pandas dataframe


    【解决方案1】:

    无需为每一行应用一个函数,您可以调用一个新的datetime 访问器来访问year 属性:

    In [35]:
    
    df1['year'] = df1['timestamp'].dt.year
    df1
    Out[35]:
                timestamp  year
    0 2005-08-31 16:39:40  2005
    1 2005-12-28 16:00:34  2005
    2 2005-10-21 17:52:10  2005
    3 2014-01-28 12:23:15  2014
    4 2014-01-28 12:23:15  2014
    5 2011-02-04 18:32:34  2011
    6 2011-02-04 18:32:34  2011
    7 2011-02-04 18:32:34  2011
    

    如果您的时间戳是 str,那么您可以使用 pd.to_dateime 转换为 datetime64:

    df['timestamp'] = pd.to_datetime(df['timestamp'])
    

    您可以像上面一样使用dt 访问月份和其他属性。

    对于0.15.0 之前的版本,您可以执行以下操作:

    df1['year'] = df1['timestamp'].apply(lambda x: x.year)
    

    【讨论】:

    • 谢谢,@EdChum,但它不起作用,给出 AttributeError: 'Series' object has no attribute 'year',虽然我将原始 DF 转换为 datetime64[ns]... 我试过了申请 DF.year 但它不起作用...
    • 不,你用你的列名替换df['col_name'].dt.year 替换col_name,还有你的熊猫版本是什么?我认为日期时间属性是在0.15.0 中引入的
    • 我得到 AttributeError: 'Series' object has no attribute 'dt' 当我使用带有附加列的原始 DF 时,如果我定义一个新的 DF1 = pd.to_datetime(DF)..也许我应该使用明确的名称而不是 dt 缩写? :-(
    • 抱歉,您必须将转换结果分配回或分配给新的 df,所以只要 DF 是一个系列,DF = pd.to_datetime(DF) 就应该可以工作
    • type(DF1) (或转换的 DF,如果您愿意)是 不幸的是它不起作用:-(将继续挖掘......
    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 2013-01-18
    • 2015-08-04
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多