如何使用pandas.to_datetime处理“奇怪”的字符串格式

我正在尝试将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]

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注