使用pandas或awk合并非常大的csv
我有两个csv,如下所示(试图通过pandas读取它们)df1文件是17GB(我通过pandas read_csv读取),df2是700mb,我想使用使用pandas或awk合并非常大的csv,pandas,join,awk,Pandas,Join,Awk,我有两个csv,如下所示(试图通过pandas读取它们)df1文件是17GB(我通过pandas read_csv读取),df2是700mb,我想使用trig_seq进行合并。但是蟒蛇会被杀死。有没有办法通过awk/join来实现 >>> df1.head() StreamId SeqNum Timestamp_p1 trig_seq 1 1 14914503 10000000001
trig_seq
进行合并。但是蟒蛇会被杀死。有没有办法通过awk/join来实现
>>> df1.head()
StreamId SeqNum Timestamp_p1 trig_seq
1 1 14914503 10000000001
1 2 1491450 10000000002
1 3 1491450 10000000003
1 4 1491450 10000000004
1 5 149145 10000000005
>>> df2= pd.read_csv("/tmp/my.csv")
>>> df2.head()
model_id order ctime trig_seq
e62 1000000 1493311414272 30021182183
e62 1000001 149199641344 30021210134
e22 1000002 1491081210880 30021227875
e62 1000003 14951949824 30021239627
e62 1000004 14927136256 30021241522
>>> r1 = pd.merge(df1,df2)
Killed
试试这个-
$ cat f1
1 1 14914503 10000000001
1 2 1491450 10000000002
1 3 1491450 10000000003
1 4 1491450 10000000004
1 5 149145 10000000005
$ cat f2
e62 1000000 1493311414272 30021182183
e62 1000001 149199641344 30021210134
e22 1000002 1491081210880 30021227875
e62 1000003 14951949824 30021239627
e62 1000004 14927136256 30021241522
$ awk 'NR==FNR{a[NR]=$0;next} $2 in a {print $0,a[$1]}' f2 f1|column -t
1 1 14914503 10000000001 e62 1000000 1493311414272 30021182183
1 2 1491450 10000000002 e62 1000000 1493311414272 30021182183
1 3 1491450 10000000003 e62 1000000 1493311414272 30021182183
1 4 1491450 10000000004 e62 1000000 1493311414272 30021182183
1 5 149145 10000000005 e62 1000000 1493311414272 30021182183
基本的
awk 'FNR=NR{T[$4]=$3;next}{print $0 OFS T[$2]}' f1 f2 > New.f2
如果出现内存问题,请尝试加载只需要时间戳,但读取两次
awk 'FNR==1 { f++ }
f==1 { T[$2]; next }
f==2 && ($4 in T) { T[$4]=$3; next }
{ print $0 OFS t[$2] }
' f2 f1 f2 > New.f2
上述输入的最终结果应该是什么样的?df2(较小的文件)应该只有df1中额外的一列时间戳_p1。它使用“trig_seq”映射的是在
df1
中唯一匹配的行,例如,您希望将时间戳从df1
合并到df2
,因此您希望通过匹配的trig_seq
过滤df1
,那么,这些匹配是否唯一且不重复,因此df1
say具有100万个唯一触发器,而df2
包含其中的一个子集