Python Pandas 导出到镶木地板,如何覆盖文件夹输出

Mim*_*Mim 6 python pandas parquet

我是 pandas 读取 csv 文件,然后将其导出到按日期分区的 Parquet,效果很好

import pandas as pd
import datetime
df = pd.read_csv('box.csv',parse_dates=True)
df['SETTLEMENTDATE'] = pd.to_datetime(df['SETTLEMENTDATE'])
df['Date'] = df['SETTLEMENTDATE'].dt.date
df.to_parquet('nem.parquet',partition_cols=['Date'],allow_truncated_timestamps=True)
Run Code Online (Sandbox Code Playgroud)

这是一个示例输出 在此输入图像描述

当我再次运行脚本时,它将生成一个新文件 在此输入图像描述

Pandas 中是否有一个选项可以覆盖文件,并仅在有新数据时添加新文件?

Chr*_*ris 1

to_parquet我今天在使用partition_cols时遇到了这个问题。我的解决方法是运行:

\n
import pandas as pd\nimport pyarrow as pa\nimport pyarrow.parquet as pq\n\n\ndf = pd.read_csv('box.csv',parse_dates=True)\ndf['SETTLEMENTDATE'] = pd.to_datetime(df['SETTLEMENTDATE'])\ndf['Date'] = df['SETTLEMENTDATE'].dt.date\n\n# convert to pyarrow table\ndf_pa = pa.Table.from_pandas(df)\n\npq.write_to_dataset(df_pa,\n  root_path = 'nem.parquet',\n  partition_cols = ['Date'],\n  basename_template = "part-{i}.parquet",\n  existing_data_behavior = 'delete_matching')\n
Run Code Online (Sandbox Code Playgroud)\n

这里的关键论点是existing_data_behavior

\n
\n

控制数据集如何处理目标\n中已存在的数据。默认行为为 \xe2\x80\x98overwrite_or_ignore\xe2\x80\x99。

\n

\xe2\x80\x98overwrite_or_ignore\xe2\x80\x99 将忽略任何现有数据,并将覆盖\n与输出文件同名的文件。其他现有文件将\n被忽略。此行为与每次写入的唯一\nbasename_template 相结合,将允许追加工作流程。

\n

如果目标中存在任何数据,\xe2\x80\x98error\xe2\x80\x99 将引发错误。

\n

\xe2\x80\x98delete_matching\xe2\x80\x99 在写入分区数据集时很有用。第一次遇到每个分区目录时,\n整个目录将被删除。这允许您完全覆盖旧的\n分区。仅当use_legacy_dataset=False 时才支持此选项。

\n
\n

运行使用:\npyarrow==10.0.1

\n