如何将周格式数据(如1-2018)转换为Pandas datetime对象?
周数-年份格式转Pandas Datetime解决方案
你遇到的错误是因为%W(或%U)格式符必须搭配一周内具体某天的参数——单独的周数+年份无法唯一确定一个具体日期,Pandas不知道该取这一周的哪一天来生成datetime对象。
下面是两种可行的解决方法:
方法一:给日期字符串追加周内天数标识
直接在每个"周数-年份"字符串后追加一周内的天数(比如取周一或周日),再用完整的格式符转换:
import pandas as pd df1 = pd.DataFrame(columns=["date"]) df1['date'] = ["1-2018", "1-2018", "2-2018", "2-2018", "3-2018", "4-2018", "4-2018", "4-2018"] # 追加"-1"表示取该周的周一(%w=1对应周一),如果要取周日就追加"-0" df1["date"] = pd.to_datetime(df1["date"] + "-1", format="%W-%Y-%w")
这里的%w是周内天数格式符:0代表周日,1代表周一,以此类推到6代表周六。
方法二:拆分周数和年份后构造datetime
先拆分出周数和年份,再结合周内天数参数生成datetime:
import pandas as pd df1 = pd.DataFrame(columns=["date"]) df1['date'] = ["1-2018", "1-2018", "2-2018", "2-2018", "3-2018", "4-2018", "4-2018", "4-2018"] # 拆分周数和年份并转为整数类型 df1[['week', 'year']] = df1['date'].str.split('-', expand=True).astype(int) # 传入year、week和weekday参数生成datetime,weekday=0对应周一,weekday=6对应周日 df1['date'] = pd.to_datetime(df1[['year', 'week']].assign(weekday=0))
注意:不同地区对一周起始日的定义不同——%W以周一为一周第一天,%U以周日为一周第一天,你可以根据自己的需求调整格式符或weekday参数。
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

