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 中是否有一个选项可以覆盖文件,并仅在有新数据时添加新文件?
to_parquet
我今天在使用partition_cols时遇到了这个问题。我的解决方法是运行:
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
运行使用:\npyarrow==10.0.1
\n