简体   繁体   English

将带有周数的列转换为日期

[英]Convert a column with a week number to a date

Is there any way the below code can be modified to convert an entire column?有什么办法可以修改下面的代码来转换一整列? I have tried several formats and am unable to get this code to work on a column of data:-我尝试了几种格式,但无法让此代码处理一列数据:-

>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> week = 40
>>> year = 2019
>>> date = datetime.date(year,1,1)+relativedelta(weeks=+week)
>>> date
datetime.date(2019, 10, 8)

Many thanks for helping with this.非常感谢您提供帮助。

You can try with define your own function.您可以尝试定义自己的 function。

def yourfunc(year, week):
    return datetime.date(year,1,1)+relativedelta(weeks=+week)

df['new'] = [ yourfunc(x, y) for x, y in zip(df['year'], df['week'])]

May be something like this:可能是这样的:

import datetime
from dateutil.relativedelta import relativedelta
week = 40
year = 2019
date = datetime.date(year,1,1)+relativedelta(weeks=-week)

df = pd.DataFrame({'year': [2019, 2020], 'week': [40, 10]})
df['date'] = df.apply(lambda x: datetime.date(x.year,1,1) + 
                      relativedelta(weeks=-int(x.week)), axis=1)
print(df)

   year  week        date
0  2019    40  2018-03-27
1  2020    10  2019-10-23

Kr

assuming your df looks like假设你的 df 看起来像

import pandas as pd

df = pd.DataFrame({'year': [2020, 2020, 2021, 2021],
                   'week': [52, 53, 1, 2]})

and 'week' specifies the ISO week, you can use并且 'week' 指定 ISO 周,您可以使用

df['date'] = pd.to_datetime((df['year']*100+df['week']).astype(str)+'1' , format='%G%V%u')

# df['date']
# 0   2020-12-21
# 1   2020-12-28
# 2   2021-01-04
# 3   2021-01-11
# Name: date, dtype: datetime64[ns]

Note that you need to specify a weekday;请注意,您需要指定工作日; in the example I use '1' for Monday.在示例中,我使用 '1' 表示星期一。 See strftime() and strptime() Format Codes for more info.有关详细信息,请参阅strftime() 和 strptime() 格式代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM