【问题标题】:Calculate day of year in dataframe from a datetime column to another column in Python计算数据框中的日期从日期时间列到 Python 中的另一列
【发布时间】:2022-12-13 20:15:05
【问题描述】:

我有一个 dataframe,其中有一个 datetime 列,例如 2014-01-012016-06-05 等。现在我想在 dataframe 中添加一个列来计算一年中的第几天(对于给定年份)。

在这个论坛上,我确实确实找到了一些提示,但我正在努力处理类型和dataframe 的东西。 所以这很好用

from datetime import datetime

day_to_calc = today

day_of_year = day_to_calc.timetuple().tm_yday

day_of_year

但是我的day_to_calc不是今天,而是df['Date']。但是,如果我尝试这个

df['DOY'] = df['Date'].timetuple().tm_yday

我得到

AttributeError:“系列”对象没有属性“timetuple”

好的,所以我想我可能需要一个地图功能? 所以我正在尝试类似..

df['DOY'] = map (datetime.timetuple().tm_yday,df['Date'])

你们肯定知道那是多么愚蠢 ;-)(但我仍在学习 Python)

TypeError: 'datetime.datetime' 对象的描述符 'timetuple' 需要参数

所以这是有道理的,因为我需要将日期作为参数传递,sooo ..尝试

df['DOY'] = datetime.timetuple(df['Date']).tm_yday 

TypeError: 描述符 'timetuple' 需要一个 'datetime.datetime' 对象但收到了一个 'Series'

一定有一个简单的方法,但我就是想不通语法:-(

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    使用dayofyear函数:

    import pandas as pd
    # first convert date string to datetime with a proper format string
    df = pd.DataFrame({'Date':pd.to_datetime(['2014-01-01', '2016-06-05'], format='%Y-%m-%d')})
    # calculate day of year
    df['DOY'] = df['Date'].dt.dayofyear
    print(df)
    

    输出:

            Date  DOY
    0 2014-01-01    1
    1 2016-06-05  157
    

    【讨论】:

    • 我知道它必须很简单 :-)。显然我的 [Date] 毕竟不是日期时间,所以我必须转换它,但这有效 df['DOY'] = pd.to_datetime (df['Date']).dt.dayofyear
    • 好的。如果日期时间字符串很复杂,我在代码中添加了一个格式示例。
    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2022-11-27
    • 2012-07-24
    相关资源
    最近更新 更多