首页 > 解决方案 > Pandas 脚本在尝试合并两个文件时被杀死

问题描述

我想根据两个数据框中的键合并两个文件。第一个 csv 文件有 36k 行 第二个 csv 文件有 2.18 亿行

第一个 csv 我喜欢:

A
123
234

第二个csv就像:

A|B|C|D|E|F|G|H
123|xxx|yyy|www|qqq|aaa|kkk|ttt
123|vvv|ttt|rrr|ooo|bbb|lll|eee
123|ccc|zzz|ttt|ooo|nnn|ppp|fff
987|hhh|dfz|dfg|mmm|nlk|pfp|fww 

合并文件后我想要的结果如下:

123|xxx|yyy|www|qqq|aaa|kkk|ttt
123|vvv|ttt|rrr|ooo|bbb|lll|eee
123|ccc|zzz|ttt|ooo|nnn|ppp|fff

因为我想在文件二中找到文件一的所有出现并返回整行。

我的代码如下:

df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv', sep = '|')
merge = df1.merge(df2, how='inner', on = 'A')

但它崩溃了,因为我猜没有内存来处理大文件。我该如何解决这个问题?有没有更好的方法来处理大文件。

我实现了一个 for 循环,但它需要很长时间:

list = [123,897] #this list comes from file 1
newfile = open('newfile.csv', 'w')
newfile.write('A|B|C|D|E|F|G|H')
newfile.write('\n') 
input = csv.reader(open(file2.csv, 'r'), delimiter = '|')
for row in input:
    for i in range(0, len(list)):
        if list[i] == row[0]:
            newfile.write(row[0] + '|' + row[1] + '|' + row[2] + '|' + row[3] + '|' + row[4] + '|' + row[5] + '|' + row[6] + '|' + row[7])
            newfile.write('\n')

我想在熊猫中解决它,但现在欢迎任何建议。提前致谢。

标签: pythonpandas

解决方案


推荐阅读