You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas DataFrame转换日期为周数时的周索引问题

解决Pandas日期转周数的自定义周索引问题

问题背景

将Pandas DataFrame日期列转换为周数列时,遇到ISO周标准的冲突:

  • 2018-01-01被识别为2018年第1周
  • 2018-12-24为2018年第52周,但2018-12-31被归为2019年第1周,导致同一年度出现两个第1周条目

需求:

  • 将2018-01-08设为2018年第1周
  • 完全忽略2018-01-01的记录
  • 调整后2018-12-24为第51周、2018-12-31为第52周

原代码

sym_2018 = pd.read_csv('/content/2018_symptoms_dataset.csv')
sym_2019 = pd.read_csv('/content/2019_weekly_symptoms_dataset.csv')

df3 = sym_2018.append(sym_2019) # Add both sets to make 2018-2019 set.

df3 = sym_2018.append(sym_2019) # Add both sets to make 2018-2019 set.

# Converting values of Data column in datetime

df3['Date'] = pd.to_datetime(df3['date']) # tweets_df['Time'] = pd.to_datetime(tweets_df['Time'])

# Getting week value

df3['Week'] = df3['Date'].dt.isocalendar().week # Convert date to week and add a column Week.
df3['Year'] = df3['Date'].dt.isocalendar().year # Convert date to year and add a column Year.

解决方案

核心思路

  1. 过滤掉2018-01-01的记录
  2. 基于自定义起始日期计算周数,替代ISO周标准,确保周数完全符合需求

修改后代码

import pandas as pd

# 读取数据集
sym_2018 = pd.read_csv('/content/2018_symptoms_dataset.csv')
sym_2019 = pd.read_csv('/content/2019_weekly_symptoms_dataset.csv')

# 合并数据(修正原代码重复合并问题,使用pd.concat替代已弃用的append)
df3 = pd.concat([sym_2018, sym_2019], ignore_index=True)

# 转换日期列格式
df3['Date'] = pd.to_datetime(df3['date'])

# 1. 过滤掉2018-01-01的记录
df3 = df3[df3['Date'] != pd.to_datetime('2018-01-01')]

# 2. 自定义周数计算逻辑
# 2018年周数基准:2018-01-08为第1周
base_2018 = pd.to_datetime('2018-01-08')
# 2019年周数基准:2019-01-07为第1周(衔接2018年第52周)
base_2019 = pd.to_datetime('2019-01-07')

# 分年份计算周数
mask_2018 = df3['Date'].dt.year == 2018
mask_2019 = df3['Date'].dt.year == 2019

# 计算2018年周数:(日期与基准日的天数差 //7) +1,确保基准日为第1周
df3.loc[mask_2018, 'Week'] = ((df3.loc[mask_2018, 'Date'] - base_2018).dt.days // 7) + 1
# 计算2019年周数
df3.loc[mask_2019, 'Week'] = ((df3.loc[mask_2019, 'Date'] - base_2019).dt.days // 7) + 1

# 提取年份
df3['Year'] = df3['Date'].dt.year

代码说明

  • 使用pd.concat替代append:append已被Pandas弃用,concat是更推荐的合并方式
  • 过滤逻辑:直接排除2018-01-01的所有记录
  • 自定义周数:通过计算日期与基准日的相对天数,整除7后加1,保证周数完全按需求划分,避免ISO周的跨年度问题

内容的提问来源于stack exchange,提问作者Formal_that

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:15:47