我有一个数据框,其跨列和列内具有混合日期格式。当尝试将它们从对象转换为日期时间类型时,由于列 date1 具有混合格式,我收到错误。我不知道在这种情况下如何解决它。另外,如何从两列(date1 和 date2)中删除秒数?
这是我尝试的代码:
df = pd.DataFrame(np.array([[10, "2021-06-13 12:08:52.311 UTC", "2021-03-29 12:44:33.468"],
[36, "2019-12-07 12:18:02 UTC", "2011-10-15 10:14:32.118"]
]),
columns=['col1', 'date1', 'date2'])
df
>>
col1 date1 date2
0 10 2021-06-13 12:08:52.311 UTC 2021-03-29 12:44:33.468
1 36 2019-12-07 12:18:02 UTC 2011-10-15 10:14:32.118
# Converting from object to datetime
df["date1"]= pd.to_datetime(df["date1"], format="%Y-%m-%d %H:%M:%S.%f UTC")
df["date2"]= pd.to_datetime(df["date2"], format="%Y-%m-%d %H:%M:%S.%f")
>>
ValueError: time data '2019-12-07 12:18:02 UTC' does not match format '%Y-%m-%d %H:%M:%S.%f UTC' (match)
对于转换为日期时间,我发现 infer_datetime_format 很有帮助。 无法让它在完整的数据帧上工作,它能够一次转换一列。
In [19]: pd.to_datetime(df["date1"], infer_datetime_format=True)
Out[19]:
0 2021-06-13 12:08:52.311000+00:00
1 2019-12-07 12:18:02+00:00
Name: date1, dtype: datetime64[ns, UTC]
In [20]: pd.to_datetime(df["date2"], infer_datetime_format=True)
Out[20]:
0 2021-03-29 12:44:33.468
1 2011-10-15 10:14:32.118
Name: date2, dtype: datetime64[ns]
如果至少所有格式都以这种格式“%Y-%m-%d %H:%M”开头,那么您可以将所有字符串切片直到该点并使用它们
In [32]: df['date1'].str.slice(stop=16)
Out[32]:
0 2021-06-13 12:08
1 2019-12-07 12:18
Name: date1, dtype: object
为了摆脱日期时间值中的秒,您可以使用 round ,而不是简单地摆脱这些值,您还可以检查下限和上限,无论更适合您的用例。
In [28]: pd.to_datetime(df["date1"], infer_datetime_format=True).dt.round('T')
Out[28]:
0 2021-06-13 12:09:00+00:00
1 2019-12-07 12:18:00+00:00
Name: date1, dtype: datetime64[ns, UTC]
In [29]: pd.to_datetime(df["date2"], infer_datetime_format=True).dt.round('T')
Out[29]:
0 2021-03-29 12:45:00
1 2011-10-15 10:15:00
Name: date2, dtype: datetime64[ns]
我有混合类型的 Datae 格式,如 2022-02-10,24-aug-2021,10-05-2021,02/10/2021 和其他格式包含在数据集中,所以我想采用一种格式,如何我可以在 python pandas 中处理这些类型的数据