python 3.x-将熊猫日期转换为周数



我想从pandas数据帧中的数据中提取一个星期号。

日期格式为datetime64[ns]

我已将日期标准化以从中删除时间

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

所以数据帧列中的日期现在看起来像是2015-06-17

现在我想把它转换成一个星期的数字。

只需访问Series.dt.isocalendar((的周属性:

示例:

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

这里是使用strftime的另一种可能性。CCD_ 2是一种很好的资源。

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

'%U'表示一年中的周数(星期日是一周的第一天(,用零填充的十进制数表示。新年中第一个星期日之前的所有日子都被视为在第0周。

如果你有多年的日期,我建议你创建一个年周组合

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

Pandas具有.dayofyear.weekofyear功能,可以直接应用于pandas.to_datetime(df['column_name'])的输出,并将类型"Timestamp"作为输出。

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)
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

更新到此答案
在我当前的python版本中(3.72021年5月(。语法df['Date'].dt.week正在打印以下警告:FutureWarning: weekofyear and week have been deprecated, please use DatetimeIndex.isocalendar().week instead使用DatetimeIndex的方法是:df['week_number'] = pd.DatetimeIndex(df.index).isocalendar().week
这里有一个小的演示它的使用返回一个系列

# 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)

熊猫的情况下:

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()

isocalendar()将周编号1分配给一年中包含星期四的第一个日历周:
https://docs.python.org/3/library/datetime.html#datetime.date.isocalendar

strftime('%U')strftime('%W')将周编号1分别分配给一年中包含周日和周一的第一个日历周:
https://docs.python.org/3/library/datetime.html#strftime-和字符串格式代码

如果Excel函数WEEKNUM(..., return_type=1)的返回值是所需的输出,请使用strftime('%U').astype(int) + 1:
https://support.microsoft.com/en-us/office/weeknum-function-e5c43a03-b4ab-426c-b411-b18c13c75340

===========

idx_dt = pd.date_range('2021-12-31', periods=7, freq='D')
df = pd.DataFrame(
    {
        'Weekday (str)': idx_dt.strftime('%Y-%m-%d (%a)'),
        'Weeknum (isocalendar)': idx_dt.isocalendar().week,
        'Weeknum (%U)': idx_dt.strftime('%U').astype(int),
        'Weeknum (Excel)': [53, 1, 2, 2, 2, 2, 2],
    },
    index=idx_dt)
Weekday (str)   Weeknum (isocalendar)   Weeknum (%U)    Weeknum (Excel)
2021-12-31 (Fri)        52              52              53
2022-01-01 (Sat)        52              0               1
2022-01-02 (Sun)        52              1               2
2022-01-03 (Mon)        1               1               2
2022-01-04 (Tue)        1               1               2
2022-01-05 (Wed)        1               1               2
2022-01-06 (Thu)        1               1               2

相关内容

  • 没有找到相关文章

最新更新