![](/img/trans.png)
[英]Extract day/year from dataframe string column and sum it [Python]
[英]Calculate day of year in dataframe from a datetime column to another column in Python
我有一个带有datetime
时间列的dataframe
,例如2014-01-01
、 2016-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'
一定有一个简单的方法,但我就是想不通语法:-(
使用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
我注意到上面的答案没有详细说明,所以我在下面提供了一个更具解释性的答案。
尝试以下操作:
import pandas as pd
# Create a pandas datetime range for the year 2022
passed_2022 = pd.date_range('2022-01-01', '2022-12-31')
# Convert the datetime range to a list of strings in the format 'YYYY-MM-DD'
passed_2022_list = [i.strftime('%Y-%m-%d') for i in passed_2022]
# Create a DataFrame
data = pd.DataFrame({'datetime': passed_2022_list})
# Filter the data DataFrame to only include dates in the passed_2022 list
data = data[data['datetime'].isin(passed_2022_list)]
# Count the number of rows in the filtered DataFrame
num_days_passed = len(data)
# Create a new DataFrame with 'datetime' and 'DAYS_OF_YEAR' columns
result = pd.DataFrame({'datetime': passed_2022_list,
'DAYS OF YEAR': range(1, num_days_passed+1)})
# Print the result of the DataFrame
print(result)
输出:
datetime DAYS OF YEAR
0 2022-01-01 1
1 2022-01-02 2
2 2022-01-03 3
3 2022-01-04 4
4 2022-01-05 5
.. ... ...
360 2022-12-27 361
361 2022-12-28 362
362 2022-12-29 363
363 2022-12-30 364
364 2022-12-31 365
[365 rows x 2 columns]
Process finished with exit code 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.