CSV1
data13 data23 d main_data1;main_data2 data13 data23data12 data22 d main_data1;main_data2 data12 data22data11 data21 d main_data1;main_data2 data11 data21data3 data4 d main_data2;main_data4 data3 data4data52 data62 d main_data3 data51 data62data51 data61 d main_data3 main_data3 data61data7 data8 d main_data4 data7 data8
CSV2
ID1 main_data1 a1 a2 a3ID2 main_data2 b1 b2 b3ID3 main_data3 c1 c2 c3ID4 main_data4 d1 d2 d3ID5 main_data5 e1 e2 e3
现在我的问题是,我知道当两个文件中的一列完全相同时如何合并两个CSV文件.但我的问题有点不同. CSV1中的第4列可以包含CSV2中的第2列.我想获得一个CSV文件,如下所示
FINAL_CSV
ID1 main_data1 a1 a2 a3 data13ID2 main_data2 b1 b2 b3 data3ID3 main_data3 c1 c2 c3 main_data3ID4 main_data4 d1 d2 d3 data7ID5 main_data5 e1 e2 e3
哪里:
1.它匹配来自两列的数据,并从第一次出现获取相应的行并写入csv文件.
2.当没有匹配时,它可以将FINAL_CSV中的最后一列留空或写入’NA’或任何类似的东西.
3.当CSV1的第4列和第5列中的数据完全匹配时,它将返回该行而不是第一次出现的行.
我完全迷失了如何做到这一点.帮助它的一部分也很好.任何建议都非常感谢.
PS-我知道来自csv文件的数据应该用逗号分隔,但为了清楚起见,我更喜欢制表符,尽管实际数据用逗号分隔.
编辑:实际上,’main_data’可以在CSV2的任何列中,而不仅仅在column2中.相同的’main_data’也可以在多行中重复,然后我想获得所有相应的行.
解决方法@H_419_29@ (g)awk的一种方式.awk -F,'NR==FNR{a[]=ID1,main_data1,a1,a2,a3,data13ID2,main_data2,b1,b2,b3,data3ID3,main_data3,c1,c2,c3,main_data3ID4,main_data4,d1,d2,d3,data7ID5,main_data5,e1,e2,e3,;next} {split(,b,";");x=b[1]} (x in a)&&!c[x]++{d[x]=} ( in a){d[]=} END{n=asorti(a,e);for(i=1;i<=n;i++)print a[e[i]]","d[e[i]]}' CSV1 CSV2
产量
总结以上是内存溢出为你收集整理的python – 根据列中的数据合并两个CSV文件全部内容,希望文章能够帮你解决python – 根据列中的数据合并两个CSV文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)