pandas 为什么“日期”被转换为“日期时间”?[重复]

wqsoz72f  于 2023-04-10  发布在  其他
关注(0)|答案(1)|浏览(148)

此问题已在此处有答案

pandas.read_parquet incorrectly interprets the date field(2个答案)
5天前关闭。
我从SQL Server阅读数据到S3作为 parquet 文件。在SQL Server中,我的数据类型是date,格式是2022-09-01,就像日期一样。
当我使用pandas读取parquet文件时,代码如下:

df=pd.read_parquet(r"path\to\file.parquet", engine='fastparquet')

pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)

print(df)

它会自动将源文件中的日期数据类型转换为目标文件中的datetime64[ns]。我不知道它为什么会这样做。列的格式与源文件中的2022-09-01相同,但数据类型是datetime
对于其他列,源数据类型是datetime,它转换为datetime,对于这个列,它是date,转换为datetime
我该怎么阻止这一切?
我不知道该怎么跟做质量保证检查的团队说,他们一直缠着我问我为什么,我不知道,因为这就是Parquet阅读器的工作方式?

crcmnpdw

crcmnpdw1#

你混淆了日期的存储方式和日期的呈现方式,它们是两个独立的考虑因素。
日期或任何数据都不是以某种格式存储的。它是以最大化SQL引擎效率的方式存储的。请参阅When storing a datetime in sql server (datetime type), what format does it store it in?以获得更深入的讨论。
然而,出于您的目的,日期存储为单个整数,日期时间存储为两个整数的分组,呈现查询结果的软件(SSMS或Toad或其他)使用数据类型指定来确定如何在从表中提取信息时呈现该信息。
当你的导出文件被读取时,同样的事情也会发生。内在数据转换是以一种方式存储日期,以另一种方式存储日期时间。当你查询它们时,它们显然会以同样的方式呈现,但这取决于UI。格式不是数据的一部分;这是渲染引擎做出的决定。
一种解决方案可能是在提取到parquet文件时,将日期值显式转换为datetime或您希望它们采用的任何其他格式。

相关问题