如何解决将多个CSV转换为单个分区的镶木地板数据集
我有一组CSV文件,每个文件用于一年的数据,每个文件中都有YEAR
列。我想将它们转换为按年份划分的单个实木复合地板数据集,以供以后在熊猫中使用。问题在于所有年份的数据框太大,无法容纳在内存中。是否可以一个接一个地迭代编写镶木地板分区?
我正在使用fastparquet
作为引擎。
简化的代码示例。这段代码消耗了内存并导致崩溃。
df = []
for year in range(2000,2020):
df.append(pd.read_csv(f'{year}.csv'))
df = pd.concat(df)
df.to_parquet('all_years.pq',partition_cols=['YEAR'])
我试图一岁一写,就像这样。
for year in range(2000,2020):
df = pd.read_csv(f'{year}.csv')
df.to_parquet('all_years.pq',partition_cols=['YEAR'])
数据文件都位于各自的YEAR=XXXX
目录中,但是当我尝试读取这样的数据集时,我只得到了最后一年。在编写单独的分区后,也许可以修复实木复合地板元数据吗?
解决方法
我想我找到了一种使用fastparquet.writer.merge()
函数的方法。实木复合地板文件每年被一个一个地写入,省去“年”列并为其指定适当的名称,然后merge()
函数创建顶级的_metadata文件。
下面的代码是要点,因为我从具体的用例中忽略了许多细节。
years = range(2000,2020)
for year in years:
df = pd.read_csv(f'{year}.csv').drop(columns=['YEAR'])
df.to_parquet(f'all_years.pq/YEAR={year}')
fastparquet.writer.merge([f'all_years.pq/YEAR={y}' for y in years])
df_all = pd.read_parquet('all_years.pq')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。