我有一个 Pandas 数据框,如下所示:
import pandas as pd
df = pd.DataFrame({'datetime':['Jan 20, 2000 12:00:00', 'Jan 20, 2000 12:00:00.5', 'Jan 20, 2000 12:00:01']})
df
datetime
0 Jan 20, 2000 12:00:00
1 Jan 20, 2000 12:00:00.5
2 Jan 20, 2000 12:00:01
我想将列转换为日期时间格式。我试过:
pd.to_datetime(df['datetime'], format='%b %d %Y %H:%M:%S')
...但是第 1 行中的
.5
小数秒导致转换失败。
我接下来尝试了:
pd.to_datetime(df['datetime'], format='%b %d %Y %H:%M:%S.%f')
...但这会导致第 0 行和第 2 行由于缺少小数秒而失败。
当某些条目包含小数秒而有些条目不包含时,如何将 Pandas 数据框列转换为日期时间格式?
此代码有效地将“日期时间”列转换为日期时间格式,同时处理小数秒的混合存在。
import pandas as pd
# Sample DataFrame
df = pd.DataFrame({'datetime':['Jan 20, 2000 12:00:00', 'Jan 20, 2000 12:00:00.5', 'Jan 20, 2000 12:00:01']})
# Use errors='coerce' to handle missing fractional seconds
df['datetime'] = pd.to_datetime(df['datetime'], errors='coerce')
# Handle NaN values (missing fractional seconds) by filling with zeros
df['datetime'] = df['datetime'].fillna(pd.to_datetime(df['datetime'].dt.strftime('%Y-%m-%d %H:%M:%S') + '.000000'))
print(df)
您可以使用 format='mixed' 来推断每个元素的格式。
df['datetime'] = pd.to_datetime(df['datetime'], format='mixed')