Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pandas或awk合并2个基本不相等的文件_Python_Awk - Fatal编程技术网

Python 使用pandas或awk合并2个基本不相等的文件

Python 使用pandas或awk合并2个基本不相等的文件,python,awk,Python,Awk,我有两个csv需要合并,文件1大约是20gb,而其他文件只有~1000行。由于文件较大,我首先迭代较大的文件,并希望将较大的文件(比如file1)过滤为较小的文件,然后使用pandas加载/合并 File1:较大的文件如下所示 col1,col2,col3 1,1,1491795901021327897 1,2,1491795901021342873 1,3,1491795901021347247 1,4,1491795901021351620 1,5,1491795901021356612 1

我有两个csv需要合并,文件1大约是
20gb
,而其他文件只有
~1000行。由于文件较大,我首先迭代较大的文件,并希望将较大的文件(比如file1)过滤为较小的文件,然后使用pandas加载/合并

File1:
较大的文件如下所示

col1,col2,col3
1,1,1491795901021327897
1,2,1491795901021342873
1,3,1491795901021347247
1,4,1491795901021351620
1,5,1491795901021356612
1,6,1491795901021361172
1,7,1491795901021366797
col1,col2,col3,col4,col5,col6
val1,val2,val3,1,6,1412414141412414
val1,val2,val3,1,3,1434252352352325
较小的文件如下所示

col1,col2,col3
1,1,1491795901021327897
1,2,1491795901021342873
1,3,1491795901021347247
1,4,1491795901021351620
1,5,1491795901021356612
1,6,1491795901021361172
1,7,1491795901021366797
col1,col2,col3,col4,col5,col6
val1,val2,val3,1,6,1412414141412414
val1,val2,val3,1,3,1434252352352325
我所做的一种方法是通过执行
10*10**10(col1处的值)+val(col2处的值)
从两个文件中创建一个键,类似地,在较小的文件中使用col4,5。将此值保存为列表,如果列表中存在值,则为较大文件中的每一行打印该行。最后打印一个小的过滤文件。有没有更好的方法在python中或使用awk来实现这一点


最终的目的是合并,但由于20gb不能加载到pandas中,所以我正在过滤我的文件并使其变小。我相信一定有更好的方法来解决这个问题。

awk
来营救吧

通过推断,我认为这就是你想要的

$ awk 'BEGIN        {FS=OFS=","} 
       NR==1        {h=$0; next} 
       NR==FNR      {a[$4,$5]=$0; next} 
       FNR==1       {print h,$3} 
       ($1,$2) in a {print a[$1,$2],$3}' small large

col1,col2,col3,col4,col5,col6,col3
val1,val2,val3,1,3,1434252352352325,1491795901021347247
val1,val2,val3,1,6,1412414141412414,1491795901021361172
它应该很容易阅读,但如果我得到关于我的解释的反馈,我可以写解释。

试试这个-

$ head f?
==> f1 <==
col1,col2,col3
1,1,1491795901021327897
1,2,1491795901021342873
1,3,1491795901021347247
1,4,1491795901021351620
1,5,1491795901021356612
1,6,1491795901021361172
1,7,1491795901021366797

==> f2 <==
col1,col2,col3,col4,col5,col6
val1,val2,val3,1,6,1412414141412414
val1,val2,val3,1,3,1434252352352325
$ awk -F, 'NR==FNR{a[$4 FS $5]=$6;next} ($1 FS $2) in a {print $0 FS a[$1 FS $2]}' f2 f1
1,3,1491795901021347247,1434252352352325
1,6,1491795901021361172,1412414141412414
$headf?

==>f1 f2请粘贴预期的输出好吗?合并的常用键是什么,请给出一个使用已发布数据的示例,合并文件的结构是什么?您是否通过将
4,5
th字段与
1,2
匹配来基于小文件过滤大文件?
是否通过将4,5字段与1,2匹配来基于小文件过滤大文件是正确您的解释是正确的。你能补充一下你的解释吗:)