【问题标题】:Python dataframe: Extract week# from Date column using isocalendar()Python 数据框:使用 isocalendar() 从日期列中提取星期#
【发布时间】:2022-07-23 00:11:03
【问题描述】:

我有Date 列的数据框,格式为1/2/2014 16:00:00。我使用以下代码将其转换为01-02-2014df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%m-%d-%Y')

我在单独的列中通过 df['Week'] = pd.DatetimeIndex(df['Date']).week 但是,我收到警告说 .week 已被弃用,应该改用 isocalendar().week

问题:

我尝试在Date 列上操作isocalendar().week,但出现错误。有人可以指出如何使用 isocalendar() 吗?

【问题讨论】:

  • 我修改了代码来实现这个代码:df['Week'] = pd.to_datetime(df['Date']).dt.isocalendar().week。它工作正常,除了日期 2012 年 12 月 31 日显示 week# 为 1 这是不正确的,它应该是 52 或其他东西。见附图。

标签: python-3.x pandas dataframe datetime


【解决方案1】:

你应该继续使用pd.to_datetime

df['Week'] = pd.to_datetime(df['Date']).dt.isocalendar().week

如果您将Date 列格式化为'%d-%m-%Y' 这种日期优先表示,则可以指定dayfirst 参数

df['Week'] = pd.to_datetime(df['Date'], dayfirst=True).dt.isocalendar().week

isocalendar().week使用%Vstrftime参数,你也可以试试其他的

  • %U - 一年中的周数(星期日 作为一周的第一天),用零填充十进制数表示。新年中第一个星期日之前的所有日子都被认为是在第 0 周。示例:00、01、...、53
  • %W - 一年中的周数(星期一为一周的第一天),以十进制数表示。新年中第一个星期一之前的所有日子都被认为是在第 0 周。例如:00、01、...、53
  • %V - ISO 8601 周 为十进制数,星期一为一周的第一天。第 01 周是包含 1 月 4 日的那一周。示例:01、02、...、53

参考:strftime() and strptime() Format Codes | datetime — Basic date and time types

df['WeekV'] = pd.to_datetime(df['Date']).dt.strftime('%V')
df['WeekU'] = pd.to_datetime(df['Date']).dt.strftime('%U')
df['WeekW'] = pd.to_datetime(df['Date']).dt.strftime('%W')

【讨论】:

  • 请看我上面的评论,以及附加的快照。 isocalendar() 似乎在 2012 年 12 月 31 日给出了错误的周数...
  • @Sinha 查看更新
【解决方案2】:

https://pythontic.com/datetime/datetime/isocalendar

“根据 ISO 标准 8601 和 ISO 标准 2015,ISO 周有 星期四作为一周的中间。这意味着新的 ISO 年可以 最早在 12 月 29 日或最晚 1 月 4 日开始 日历,即公历。”

2012 年 ISO 日历年的第 1 周从 2011 年 12 月 30 日开始,因为今年的第一个星期四是 1 月 3 日。不太符合公历

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2021-12-01
    相关资源
    最近更新 更多