【问题标题】:Converting "year" and "week of year" columns to "date" in Pandas在 Pandas 中将“年”和“年中的一周”列转换为“日期”
【发布时间】:2019-03-18 13:23:35
【问题描述】:

想要的方式

为了将带有年份和星期几的两列转换为日期,我希望执行以下操作:

df['formatted_date'] = df.year*100+df.weekofyear
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%w')

但是,它不起作用,给出ValueError

ValueError: unconverted data remains: 01

解决方法

我发现的解决方法是将一年中的一周转换为一年中的一天并使用 year-dayofyear %Y%j 格式:

df['formatted_date'] = df.year*1000+df.weekofyear*7-6 
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%j')

第一行变得丑陋,但这很好用。一年中的星期在范围 (00,53) 内。 任何想法,为什么优雅的方式不起作用?

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    您需要将 %w 用于一周中的某一天 - explanation%W 用于一周:

    http://strftime.org/%W

    以十进制数表示的一年中的周数(星期一为一周的第一天)。新年中第一个星期一之前的所有日子都被认为是在第 0 周。

    对于%w

    工作日为十进制数,其中 0 是星期日,6 是星期六。


    df = pd.DataFrame({'year':[2015, 2018],
                       'weekofyear':[10,12]})
    
    dates = df.year*100+df.weekofyear
    @adde
    df['date'] = pd.to_datetime(dates.astype(str) + '0', format='%Y%W%w')
    print (df)
    
       year  weekofyear  formatted_date       date
    0  2015  10          201510         2015-03-15
    1  2018  12          201812         2018-03-25
    

    另一种解决方案:

    #added 0 only for demontration, you can remove it
    df['formatted_date'] = df.year * 1000 + df.weekofyear * 10 + 0
    df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%W%w')
    print (df)
    
       year  weekofyear  formatted_date       date
    0  2015  10          2015100        2015-03-15
    1  2018  12          2018120        2018-03-25
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多