将Pandas日期转换为周数

wixjitnu  于 2022-12-21  发布在  其他
关注(0)|答案(6)|浏览(282)

我想从Pandas Dataframe 中的数据中提取一个星期数。
日期格式为日期时间64 [ns]
我已对日期进行了规范化,以从中删除时间

df['Date'] = df['Date'].apply(pd.datetools.normalize_date)

因此,数据框列中的日期现在显示为- 2015-06-17
现在我想把它转换成周数。

mi7gmzs6

mi7gmzs61#

只需访问Series.dt.isocalendar()的week属性:
示例:

In [286]:
df['Date'].dt.isocalendar().week

Out[286]:
0    25
dtype: int64

In [287]:
df['Week_Number'] = df['Date'].dt.isocalendar().week
df

Out[287]:
        Date  Week_Number
0 2015-06-17           25
pod7payv

pod7payv2#

这里是使用strftime的另一种可能性。strftime.org是一个很好的资源。

df['Week_Number'] = df['Date'].dt.strftime('%U')

'%U'表示一年中的周数(星期日为该周的第一天),以零填充的十进制数字表示。新的一年中第一个星期日之前的所有天都被视为第0周。
如果您有多个年份的日期,我建议您创建年-周组合

df['Year-Week'] = df['Date'].dt.strftime('%Y-%U')
eni9jsuy

eni9jsuy3#

Pandas具有.dayofyear.weekofyear功能,可直接应用于pandas.to_datetime(df['column_name'])的输出,并给出类型“时间戳”作为输出。

import pandas as pd
df['formatted_date'] = pd.to_datetime(df['datetime'])
df['day_of_year'] = df.formatted_date.apply(lambda x: x.dayofyear)
df['week_of_year'] = df.formatted_date.apply(lambda x: x.weekofyear)
57hvy0tb

57hvy0tb4#

from datetime import date
df_date = pd.DataFrame([date.today()],columns  = ['today'])
print(df_date)
#### Print Output ####
#        today
#0  2019-09-07
df_date['weeknum'] = df_date.today.apply(lambda x:x.isocalendar()[1])
print(df_date)
#### Print Output ####
#        today  weeknum
#0  2019-09-07       36
jei2mxaa

jei2mxaa5#

更新此答案

在我当前的python版本(3.7,2021年5月)中,语法df['Date'].dt.week打印了以下警告:FutureWarning: weekofyear and week have been deprecated, please use DatetimeIndex.isocalendar().week instead使用日期时间索引的方法是:df['week_number'] = pd.DatetimeIndex(df.index).isocalendar().week
这里有一个小小的演示,用它来返回一个Series

# Input
time_idx = pd.date_range('2022-01-01', periods=4, freq='H').tz_localize('UTC')
values = [9 , 8, 7, 6]

df1 = pd.DataFrame(data = values, index=time_idx, columns=['vals'])
# FutureWarning: weekofyear and week have been deprecated
df1['week_number'] = df1.index.week 

# Using DatetimeIndex.isocalendar().week instead
df2 = pd.DataFrame(data = values, index=time_idx, columns=['vals']) 
# Does not throws a warning
df2['week_number'] = pd.DatetimeIndex(df2.index).isocalendar().week 

print(df2)
bvn4nwqk

bvn4nwqk6#

如果是Pandas

import random
import pandas as pd

desired_length = 100
desired_frequency="20D" # XXXM: XXX months, "XXXD":XXX days, XXXMin: XXX minutes etc.

index = pd.date_range('2020-01-01', periods=desired_length, freq=desired_frequency)
data = [random.random() for _ in range(len(index))]

df = pd.DataFrame(data=data, index=index, columns=['DATA'])
df[df.index.isocalendar().keys()] = df.index.isocalendar()

相关问题