首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换日期:从年和周数字转换为日期时间

转换日期:从年和周数字转换为日期时间
EN

Stack Overflow用户
提问于 2019-03-22 02:11:39
回答 2查看 2.2K关注 0票数 0

我正在尝试转换以下数据帧

代码语言:javascript
复制
id  year  week 
 1  2018    43
 1  2019     1
 2  2019     4
 3  2018    51

转换为包含以下列的数据帧

代码语言:javascript
复制
id  year  week  year_week
 1  2018    43    2018-43
 1  2019     1     2019-1
 2  2019     4     2019-4
 3  2018    51    2018-51

其中"year_week“是datetime类型

EN

回答 2

Stack Overflow用户

发布于 2019-03-22 03:33:24

您需要选择一周中的某一天,以便根据该数据创建时间戳。假设它们是ISO weeks,我选择"1“作为ISO周开始的星期一(还添加了一列以转换为问题中所示的字符串格式)。

如果您确实希望列数据是datetime objects而不是pandas.Timestamp,请参阅Converting between datetime and Timestamp objects,了解需要包含的另一个步骤。

代码语言:javascript
复制
from datetime import datetime
import pandas as pd

def year_week(y, w):
    return datetime.strptime(f'{y} {w} 1', '%G %V %u')

df = pd.DataFrame([(2018, 43), (2019, 1), (2019, 4), (2018, 51)], columns=['year', 'week'])
df['year_week_ts'] = df.apply(lambda row: year_week(row.year, row.week), axis=1)
df['year_week_str'] = df.apply(lambda row: row.year_week_ts.strftime('%G-%V'), axis=1)

print(df)
#    year  week year_week_ts year_week_str
# 0  2018    43   2018-10-22       2018-43
# 1  2019     1   2018-12-31       2019-01
# 2  2019     4   2019-01-21       2019-04
# 3  2018    51   2018-12-17       2018-51

# for python 3 versions pre-3.6 use '{} {} 1'.format(y, w) instead of the f string above
票数 3
EN

Stack Overflow用户

发布于 2019-06-29 20:59:54

您可能想要查看一下epiweeks包!

给定您提供的数据,并假设使用ISO周编号系统,假设您想要创建一个包含周结束日期的列:

代码语言:javascript
复制
from epiweeks import Week

df['ending'] = df.apply(
        lambda row: pd.to_datetime(Week(row.year, row.week, 'iso').enddate()),
        axis=1
)

这会产生一个datetime类型的新列。

希望这就是你要找的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55286754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档