pandas.read_parquet错误地解释了日期字段

wlwcrazw  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(140)

我有一个parquet文件,其中有一个日期字段,名为'BusinessDate'。当我将其导入到dataframe时,它会自动确定字段BusinessDate为日期(datetime64[ns, UTC])。
但是,由于此'BusinessDate'字段的格式为'YYYY-MM-DD',因此其中一些日期被错误地导入。例如,2013-02-01应该是2013年2月1日,而实际上它被解释为2013年1月2日。
导入 parquet 文件时,是否可以设置'BusinessDate'字段的正确格式?
最初我使用:

df.read_parquet('data.parquet')

如果我有一个csv文件,我的解决方案是:

custom_date_parser = lambda x: datetime.strptime(x, '%Y-%m-%d')
df.read_csv('data.csv',parse_dates=['BusinessDate'], date_parser=custom_date_parser)

然而,当我尝试类似的代码来修复日期问题时,它给出了一个错误:

custom_date_parser = lambda x: datetime.strptime(x, '%Y-%m-%d')
df.read_parquet('data.parquet',parse_dates=['BusinessDate'], date_parser=custom_date_parser)

错误是由于read_parquet函数没有parse_datesdate_parser属性,read_csv函数有。
所以我的问题是我如何在pandas中导入一个parquet文件,以便'BusinessDate'字段以正确的格式(在我的情况下是'YYYY-MM-DD')正确导入为日期。或者如果pandas read_parquet函数无法做到这一点,是否可以将'BusinessDate'字段导入为pandas.DataFrame中的字符串字段,以便我可以在之后更改它?

gk7wooem

gk7wooem1#

问得好。Pandas还没有这方面的功能。
一旦你阅读了parquet,我建议你像这样使用lambda函数:

df['new_col'] = df['col'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d'))
hl0ma9xz

hl0ma9xz2#

  • 使用pd.to_datetime,并设置format参数,该参数是现有格式,而不是所需格式。
  • format代码可以在strftime()strptime()代码中找到
df['BusinessDate'] = pd.to_datetime(df['BusinessDate'], format='%Y-%m-%d').dt.date
  • 如果.read_parquet将parquet date文件解释为datetime(并添加时间组件),则使用.dt访问器仅提取date组件,并将其分配回列。
df['BusinessDate'] = ['BusinessDate'].dt.date

相关问题