提问人:guanhelluh 提问时间:11/3/2023 最后编辑:not_speshalguanhelluh 更新时间:11/3/2023 访问量:62
合并两个分块数据帧
Merging two chunked dataframes
问:
通过 Pandas 在 Python 中使用大型数据集,最初对两个数据集进行分块,以便它们可以加载到内存中,但不确定如何合并它们,因为它们被转换为 TextFileReader 而不是数据帧类型。我尝试了 SO 的解决方案,但它失败了,我以后将不得不将输出与其他文件以及其他数据处理合并几次。
我最初尝试过这个
A = pd.read_csv('A.csv', chunksize = 100000)
B= pd.read_csv('B.csv', chunksize = 100000)
C= pd.merge('A', 'B', how = 'left', on ='ID')
但是合并时出现错误,因为它们不是数据帧,所以我尝试了这里的建议:
n = 200000 #chunk row size
list_df = [df2[i:i+n] for i in range(0, df2.shape[0],n)]
res = pd.DataFrame()
for chunk in list_df:
res = pd.concat([res, df1.merge(chunk, how='left', left_on=['x','y'], right_on['x','y'])
这返回了一个错误,指出模块“Pandas”没有属性“dataframe”。 寻找合并这些的适当方法。
我还想知道我是否必须在脚本中每次合并之前每次都执行解决方案合并代码?正如我在顶部所说,我将不得不对输出进行大量合并和其他数据操作。有没有更快的方法可以做到这一点,而不是在每次合并之前做 for 循环?
答:
0赞
Ömer Sezer
11/3/2023
#1
Dask 可以帮助您: https://docs.dask.org/en/stable/dataframe.html
Dask 是一个并行计算库,可以通过并行操作有效地处理大型数据集。
Dask 代码:
import dask.dataframe as dd
A = dd.read_csv('A.csv')
B = dd.read_csv('B.csv')
C = dd.merge(A, B, how='left', on='ID')
C = C.compute()
C.to_csv('C.csv', index=False)
我还测试了生成 A.csv 和 B.csv 块 100K。生成后,dask 代码将合并它们。
生成器 A.csv 和 B.csv:
import pandas as pd
import numpy as np
n_rows = 100000
data = {
'ID': range(1, n_rows + 1),
'ColumnB': ['ValueB' + str(i) for i in range(1, n_rows + 1)]
#'ColumnA': ['ValueA' + str(i) for i in range(1, n_rows + 1)]
}
df = pd.DataFrame(data)
df.to_csv('B.csv', index=False)
# df.to_csv('A.csv', index=False)
评论
0赞
guanhelluh
11/15/2023
我使用了 Dask,但当我尝试对合并输出执行更多处理时,发现它存在数据类型问题('ValueError:dtypes 不匹配)。我需要执行初始dask.read_csv命令或输出吗?
评论