使用Pandas将星期数转换为星期日期

问题描述

如何转换dt.week(返回星期号)以显示星期日期?我当前的代码

my_net_diet_raw['Date & Time'].dt.week

返回:

1      22
2      22
3      22
4      22
       ..
176    30
177    30
178    30
179    30
180    30
Name: Date & Time,Length: 181,dtype: int64

我希望22显示为05-25-2020,23显示为06-01-2020,依此类推。

数据:

0    19732166  2020-05-31  Breakfast   
1     4016406  2020-05-31  Breakfast   
2        1132  2020-05-31  Breakfast   
3    19732166  2020-05-31      Lunch   
4        1009  2020-05-31      Lunch   
..        ...         ...        ...   
176      5749  2020-07-23      Lunch   
177     20037  2020-07-23      Lunch   
178   4159294  2020-07-23      Lunch   
179  20402843  2020-07-23      Snack   
180  23053329  2020-07-23      Snack

解决方法

检查

pd.to_datetime(my_net_diet_raw['Date & Time']).dt.to_period('w').astype(str).str.split('/').str[0]
,

假设y_net_diet_raw['Date & Time'].dtDatetimeProperties对象,则您应该可以使用y_net_diet_raw['Date & Time'].dt.date来访问日期(不需要{{1 }}。在https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.htmlhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.date.html上了解更多信息。

如果上述方法不符合您的需求,那么您可能需要尝试一下:

y_net_diet_raw['Date & Time'].dt.week转换为DatetimeProperties.dt.week 如果您想获得一定周数的头几天,则可以执行以下操作(假设DatetimeProperties.dt.date是整数的y_net_diet_raw['Date & Time'].dt.week(例如您的问题)):

Series

datetimes_of_first_day_of_each_week = my_net_diet_raw['Date & Time'].dt.week.apply(lambda week: datetime.strptime(f'2020 {week - 1} 1','%Y %W %w')) 允许您指定一个函数来计算并为原始系列中的每个给定值返回一个值,以构造新的Series.apply()。在这里,它正在创建一个新的Series对象(针对每个星期编号),其中日期是一周的第一天(在这种情况下为星期一),最后返回每个对象以创建一个新的{{1} }。

,

这对我有用。这是您要找的吗?

    df['DATE']+pd.to_timedelta(6-df['DATE'].dt.weekday,unit="d")