簡體   English   中英

日期未按預期寫入鑲木地板文件

[英]Date not writing to parquet file as expected

我有一個問題,日期在從 Pandas df 寫入鑲木地板文件后沒有按預期顯示。

以下是我的工作流程的簡要說明:

Step1: Parquet file1 位於存儲賬戶中,可以使用 Synapse serverless SQL 查詢。當 Date 列中的查詢值顯示為預期即 2022-01-01 (yyyy-MM-dd) 源數據中沒有時間.

Step2:使用pd.read_parquet將Parquet file1加載到pandas df中。 一旦 parquet 文件被加載到 df 中,Date 列的 dtype 就是 datetime64[ns]。

第 3 步:執行 df 的一些處理,有效地將一些列添加到 df 中的現有列,同時保持相同的索引。 日期列未更改。

Step4:在將df寫入parquet之前確認Date列仍然是dtype datetime64[ns]。 並列出內容 df['Date'] 給出諸如 2022-01-13 之類的值。

Step5:使用df.to_parquet將df寫入parquet file2。

Step6:在synapse serverless SQL中查詢Parquet file2,Date列中的值顯示為EPOCH時間 例如:1640995200000000

如何以與在 file1 中相同的方式將日期存儲在 file2 中? 我不需要時間戳,但如果需要讓它工作,可以添加一個時間戳,即“T00:00:00”?

Pandas 在我當前的設置中使用 pyarrow 進行鑲木地板解析。

pandas本身不支持日期,只支持時間戳。

出於某種原因,當您從 parquet 讀取數據時,日期被重新解釋為時間戳,當您將其保存回 parquet 時,它們仍然是時間戳。

您可以更改代碼,這樣日期就不會轉換為時間戳。

或者您可以在將時間戳保存到鑲木地板之前將其轉換回最新日期:

import pandas as pd

df = pd.DataFrame(
    {"Date": pd.Series(pd.Timestamp(2023,1,1))}
)

def convert_timestamps_to_dates_df(df):
    for col in df.columns:
        if df[col].dtype == "datetime64[ns]":
            df[col] = df[col].dt.date
    return df


convert_timestamps_to_dates_df(df).to_parquet("file.parquet")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM