加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 根据列中的数据合并两个CSV文件

发布时间:2020-12-16 23:06:39 所属栏目:Python 来源:网络整理
导读:我有两个csv文件,如下所示. 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 d
我有两个csv文件,如下所示.

CSV1

data13      data23      d      main_data1;main_data2      data13         data23
data12      data22      d      main_data1;main_data2      data12         data22
data11      data21      d      main_data1;main_data2      data11         data21
data3       data4       d      main_data2;main_data4      data3          data4
data52      data62      d      main_data3                 data51         data62
data51      data61      d      main_data3                 main_data3     data61
data7       data8       d      main_data4                 data7          data8

CSV2

id1      main_data1      a1      a2      a3
id2      main_data2      b1      b2      b3
id3      main_data3      c1      c2      c3
id4      main_data4      d1      d2      d3
id5      main_data5      e1      e2      e3

现在我的问题是,我知道当两个文件中的一列完全相同时如何合并两个CSV文件.但我的问题有点不同. CSV1中的第4列可以包含CSV2中的第2列.我想获得一个CSV文件,如下所示

FINAL_CSV

id1      main_data1      a1      a2      a3      data13
id2      main_data2      b1      b2      b3      data3
id3      main_data3      c1      c2      c3      main_data3
id4      main_data4      d1      d2      d3      data7
id5      main_data5      e1      e2      e3

哪里:
1.它匹配来自两列的数据,并从第一次出现获取相应的行并写入csv文件.
2.当没有匹配时,它可以将FINAL_CSV中的最后一列留空或写入’NA’或任何类似的东西.
3.当CSV1的第4列和第5列中的数据完全匹配时,它将返回该行而不是第一次出现的行.

我完全迷失了如何做到这一点.帮助它的一部分也很好.任何建议都非常感谢.
PS-我知道来自csv文件的数据应该用逗号分隔,但为了清楚起见,我更喜欢制表符,尽管实际数据用逗号分隔.

编辑:实际上,’main_data’可以在CSV2的任何列中,而不仅仅在column2中.相同的’main_data’也可以在多行中重复,然后我想获得所有相应的行.

解决方法

(g)awk的一种方式.
awk -F,'NR==FNR{a[$2]=$0;next}
         {split($4,b,";");x=b[1]}
         (x in a)&&!c[x]++{d[x]=$5}
         ($5 in a){d[$5]=$5}
         END{n=asorti(a,e);for(i=1;i<=n;i++)print a[e[i]]","d[e[i]]}'  CSV1 CSV2

产量

id1,main_data1,a1,a2,a3,data13
id2,main_data2,b1,b2,b3,data3
id3,main_data3,c1,c2,c3,main_data3
id4,main_data4,d1,d2,d3,data7
id5,main_data5,e1,e2,e3,

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读