python - 在 Pandas 中将“年”和“年中的一周”列转换为“日期”
问题描述
所需方式
为了将带有年份和年份的两列转换为日期,我希望执行以下操作:
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) 内。任何想法,为什么优雅的方式不起作用?
解决方案
您需要结合%w
星期几 -与星期的解释%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
推荐阅读
- python - Python:在类中获取类类型
- python - 如何根据 ID 值更新行 - Sheets API py
- django - 在 django + ubuntu + apache 中写入文件时出现权限错误
- javascript - d3.js 隐藏不透明度的弹出窗口不能与指针事件一起正常工作
- javascript - 如何在JS中的对象的多个字段中转换数据类型
- google-sheets - INDEX MATCH 公式 Google 表格返回 N/A 值
- apache-spark - 如何对 PySpark DataFrame 的精确行数(而不是分数)进行采样()
- vba - 获取 unitVector XYZ 值
- api - 请求不通过tomcat和浏览器访问spring boot嵌入式服务器
- java - 带有Thymeleaf的Java Spring以变量作为参数获取环境属性