我正在尝试将pandas数据框中的一列从字符串类型转换为日期时间类型,使用的是pandas.to_datetime。这列的值格式如下:
Q1’17
其中’Q’表示年份的季度,’17’表示2017年。
该列还包含空值(我可以删除日期为空的整行)。
我尝试通过去除季度部分并只考虑年份来解决这个问题,但无法将例如16转换为2016年,尝试的方法如下:
df_cpu["Launch_Date"] = [str(x) for x in df_cpu["Launch_Date"]]df_cpu["Launch_Date"] = [x[3:5] for x in df_cpu["Launch_Date"]]df_cpu["Launch_Date"] = [int(x) for x in df_cpu["Launch_Date"]]df_cpu["Launch_Date"] = pd.to_datetime(df_cpu["Launch_Date"], format('%Y'))
这种方法也不奏效:
df_cpu["Launch_Date"] = pd.to_datetime(df_cpu["Launch_Date"], format('Q*\'%Y'))
因为我得到了以下错误:
ValueError: (‘Unknown string format:’, “Q3’16”)
我应该如何解决这个问题?
如果值是“Q1’16”,我希望得到的输出是“01-01-2016”。
回答:
考虑到以下几点:
1) 提供的数据:
df_cpu = pd.DataFrame(["Q1'17","Q3'16"], columns=['Launch_Date'])
2) 发布日期列的长度始终为5;
你可以使用pd.offsets.QuarterBegin()来将季度添加到年初的第一天:
>> pd.to_datetime(df_cpu.Launch_Date.str[3:5],format='%y') + np.multiply(pd.offsets.QuarterBegin(startingMonth=1), df_cpu.Launch_Date.str[1:2].values.astype(int)-1)0 2017-01-011 2016-07-01Name: Launch_Date, dtype: datetime64[ns]