日期时间列转换为镶木地板文件时会变形

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

我正在处理一个 csv 文件,其中包含一个包含日期的列,但该列的 dtype 实际上只是对象,所以我将其更改为日期时间。这部分没有缺陷,除了数据类型之外,数据没有改变。但是,当我将此数据框转换为镶木地板文件时,它会将每一行转换为相同的日期,甚至不是以前的日期格式。

csv 中的日期格式为“%Y-%m-%d”,如 2011-01-29。这是处理数据框后的最后几个步骤:

df_merged_CA["date"] = pd.to_datetime(df_merged_CA["date"], format = "%Y-%m-%d")

df_merged_CA.to_parquet("merged1.parquet", compression = "gzip", engine = "pyarrow")

我检查了日期转换为日期时间后的形式是否正确,结果是,它仍然是 2011-01-29 的形式。之后,我检查了 parquet 文件以查看日期的格式是否正确,但是我发现每个日期都变成了这样的日期 43060-07-05.03:00:00.000 。我发现问题可能是由于时区而发生的,所以我将日期时间转换更改为此,但没有任何改变。

df_merged_CA["date"] = pd.to_datetime(df_merged_CA["date"],
 format = "%Y-%m-%d").dt.tz_localize('UTC').dt.tz_convert('Europe/Berlin')
python dataframe datetime data-science parquet
1个回答
0
投票

您分配时区的方法已经正确。在将数据写入 parquet 文件之前,您只需将带有日期的字段转换为string。 您可以使用 pandas 包中的

.dt.strftime()
来完成此操作。您可以在括号中输入您想要的格式。

完整代码如下:

df_merged_CA["date"] = pd.to_datetime(df_merged_CA["date"], format="%Y-%m-%d")

df_merged_CA["date"] = df_merged_CA["date"].dt.tz_localize('Europe/Berlin')

df_merged_CA["date_str"] = df_merged_CA["date"].dt.strftime('%Y-%m-%d')
df_merged_CA.drop(["date"], axis=1, inplace=True)

df_merged_CA.to_parquet("merged1.parquet", compression="gzip", engine="pyarrow")
© www.soinside.com 2019 - 2024. All rights reserved.