当小数秒的格式不一致时,如何将 Pandas 数据框列转换为日期时间?

问题描述 投票:0回答:2

我有一个 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 数据框列转换为日期时间格式?

python pandas dataframe datetime strftime
2个回答
0
投票

此代码有效地将“日期时间”列转换为日期时间格式,同时处理小数秒的混合存在。

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)

0
投票

您可以使用 format='mixed' 来推断每个元素的格式。

df['datetime'] = pd.to_datetime(df['datetime'], format='mixed')
© www.soinside.com 2019 - 2024. All rights reserved.