如何将“int64”类型的列转换为日期时间?

时间:2021-06-12 14:09:37

标签: python pandas datetime

有一个“x”列(int64),其中只显示年和月,所有天都显示为“00”。 (例如:19501200,19541100,19590300...)

经过多次尝试,我遇到了一个问题,所有值都转换为缺失值。

我该如何解决?

df['x'] = df['x'].astype(str)
df['x'] = pd.to_datetime(df['x'], format='%Y%m%d', errors='coerce')

输出

<块引用>

所有值都改为'NaT'。

df['x'] = df['x'].astype(str)
df['x'] = df['x'].str[:6]
df['x'] = pd.to_datetime(df['x'], format='%Y%m', errors='coerce')

输出

<块引用>

所有值都改为'NaT'。

预期

<块引用>

转换为只显示年和月的日期时间,例如 '195012' 、 '195411' 和 '195903'。

2 个答案:

答案 0 :(得分:2)

那是因为你的格式不对,00 不是有效日期,所以忽略这一点,直接传递 00 而不是 %d,也类型转换为 str没有必要。

df['x'] = pd.to_datetime(df['x'], format='%Y%m00', errors='coerce')

0   1950-12-01
1   1954-11-01
2   1959-03-01
Name: x, dtype: datetime64[ns]

答案 1 :(得分:1)

您可以使用:

>>pd.to_datetime('19501210', yearfirst=True)
Timestamp('1950-12-10 00:00:00')

很简单(因为你说所有的日子都是零):

>>pd.to_datetime('19501200', format='%Y%m00')
Timestamp('1950-12-01 00:00:00')