[英]How to merge two CSV files by value in column using pandas PYTHON
[英]How to merge two csv files using multiprocessing with python pandas
我想使用python熊猫将具有公共列的两个csv文件合并到2 GB内存后使用32位处理器,它将抛出内存错误,我该如何使用多重处理或任何其他方法执行相同的操作
import gc
import pandas as pd
csv1_chunk = pd.read_csv('/home/subin/Desktop/a.txt',dtype=str, iterator=True, chunksize=1000)
csv1 = pd.concat(csv1_chunk, axis=1, ignore_index=True)
csv2_chunk = pd.read_csv('/home/subin/Desktop/b.txt',dtype=str, iterator=True, chunksize=1000)
csv2 = pd.concat(csv2_chunk, axis=1, ignore_index=True)
new_df = csv1[csv1["PROFILE_MSISDN"].isin(csv2["L_MSISDN"])]
new_df.to_csv("/home/subin/Desktop/apyb.txt", index=False)
gc.collect()
请帮我解决这个问题
提前致谢
我认为您只需要第二个文件中的一列(实际上,只需要该列中的唯一元素),因此无需加载整个数据帧。
import pandas as pd
csv2 = pd.read_csv('/home/subin/Desktop/b.txt', usecols=['L_MSISDN'])
unique_msidns = set(csv2['L_MSISDN'])
如果仍然出现内存错误,请尝试分批执行:
chunk_reader = pd.read_csv('/home/subin/Desktop/b.txt', usecols=['L_MSISDN'], chunksize=1000)
unique_msidns = set()
for chunk in chunk_reader:
unique_msidns = unique_msidns | set(chunk['L_MSIDNS'])
现在,我们可以处理第一个数据帧。
chunk_reader = pd.read_csv('/home/subin/Desktop/a.txt', chunksize=1000)
for chunk in chunk_reader:
bool_idx = chunk['PROFILE_MSISDN'].isin(unique_msidns)
# *append* selected lines from every chunk to a file (mode='a')
# col names are not written
chunk[bool_idx].to_csv('output_file', header=False, index=False, mode='a')
如果需要将列名写入输出文件,则可以使用第一个块(为了代码清晰起见,已跳过了它)。
我相信增加chunksize
是安全的(并且可能更快)。
我没有测试此代码,因此请务必仔细检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.