如何在两个csv文件之间显示相似的值,并在python中创建具有所需输出的新csv文件?

如何在两个csv文件之间显示相似的值,并在python中创建具有所需输出的新csv文件?,python,csv,Python,Csv,嗨,我有两个csv文件,它们是boom.csv和kaboom.csv,它们的数据如下 boom.csv id;rollnumber;total;subjects;obtained;rank;standing 260406;260737;137;10;127;10;111 552592;260806;134;10;124;10;108 402788;260837;134;10;124;10;108 262744;260851;131;10;121;10;105 502870;260874;131;

嗨,我有两个csv文件,它们是boom.csv和kaboom.csv,它们的数据如下

boom.csv

id;rollnumber;total;subjects;obtained;rank;standing
260406;260737;137;10;127;10;111
552592;260806;134;10;124;10;108
402788;260837;134;10;124;10;108
262744;260851;131;10;121;10;105
502870;260874;131;10;121;10;105
342541;260879;131;10;121;10;105
502806;260902;135;10;125;10;109
261664;261182;217;21;196;15;161
而kaboom.csv由如下数据组成 kaboom.csv

    id
342541
552592
402788
502806
502870
在这里,我试图比较这两个文件,并试图拿出它们之间的共同数据,并将它们存储到一个新的csv文件中。。 更确切地说。。我正在考虑kaboom.csv中的“id”值,并将其与boom.csv中的id值进行比较,试图创建一个新的csv文件,该文件只包含相同的id,以及与之相关联的整行值,即rollnumber、total subjects、Acquired、rank、standing

期望输出:- bigbang.csv

     id          rollnumber   total   subjects   obtained   rank   standing

     402788      260837        134     10        124        10      108
     552592      260806        134     10        124        10      108
     502870      260874        131     10        121        10      105
     342541      260879        131     10        121        10      105
     502806      260902        135     10        125        10      109

有人能帮忙吗?如何使用python?

我们首先通过模块读取csv文件,从
boom.csv
kaboom.csv
获取所有项目

然后我们迭代两个循环,并找到公共id

bigbang_items = [ item_2 for item_1 in kaboom_items for item_2 in boom_items if item_1[0] == item_2[0]]
然后我们将此列表保存到
bigbang.csv

headers =  ['id','rollnumber','total','subjects','obtained','rank','standing']
with open('bigbang.csv','w') as fp:
    writer = csv.writer(fp, delimiter='\t')
    writer.writerow(headers)
    writer.writerows(bigbang_items)
因此,
bigbang.csv
看起来像

id  rollnumber  total   subjects    obtained    rank    standing
342541  267359  117 8   108 8   106
552592  261347  243 16  227 19  174
402788  261381  231 16  215 19  164
502806  261664  235 14  221 15  173
502870  262871  248 22  226 21  151

使用熊猫,您可以轻松地将CSV文件作为数据帧加载,并按列合并:

import pandas as pd

boom = pd.read_csv('boom.csv',sep = ';')
kaboom = pd.read_csv('kaboom.csv',header=0,names=['id'])
bigbang = pd.merge(boom, kaboom, on="id")

print(bigbang)
输出:

       id  rollnumber  total  subjects  obtained  rank  standing
0  552592      261347    243        16       227    19       174
1  402788      261381    231        16       215    19       164
2  502870      262871    248        22       226    21       151
3  342541      267359    117         8       108     8       106
4  502806      261664    235        14       221    15       173
然后,您可以使用以下工具轻松地将生成的数据帧写入CSV文件:

bigbang.to_csv('bigbang.csv',sep = ' ',index = False)

假设您的数据帧加载为
df_initial
df_compare
(比boom和kaboom更可读),简单的合并就足够了:

df_merge = pd.merge(df_init,df_compare, on = 'id', how='left')
要展开,此命令将搜索df并返回具有匹配id的行。将包括来自左侧df的附加数据

我在上包含了此解决方案的较长版本


您好,代码正在运行,但excel中的输出如下:id、rollnumber、total、subjects、Acquired、rank、standing,其中没有值。。我真的很抱歉,我忘了提到我的数据是什么样子的。。这都是混乱的tbh..也许这就是它在执行时没有给我正确输出的原因。。我将在我的问题中更新它。。当然,我正在更新我的问题@deveshkumarsing…嗨@deveshkumarsing我已经编辑了我的问题,我真的很抱歉。这一切都是因为我的无知。所以代码是有效的,只是数据不是你想要的格式@gendry?是的,没错……嗨@gentry,你的csv输出是空的吗,你能检查一下
bigbang_items
是什么样子的吗?我从问题本身获取了数据再次检查答案@gendry!是一样的…:/csv文件看起来像这个id、rollnumber、total、subjects、Acquired、rank、standing,所有内容都在一行一列中。您是否使用了
writer=csv.writer(fp,delimiter='\t')
行?这会导致逗号消失@gendryyes!是的。。我现在在csv文件中的数据是9行x 1列。。也许这就是问题所在?我猜?如果您的CSV文件是逗号分隔而不是空格分隔的,请尝试将
sep='\s+'
sep='
替换为
sep=','
hi!我已经修改了我的csv文件,并将其转换为正确的格式,即。。9行x 7列。。还是会出现同样的错误。。有什么建议吗?在你的帖子中包括实际的CSV文件(不是从Excel复制粘贴的,例如从记事本复制),我会相应地调整我的代码。当然。。给我一点时间我已经按照你告诉我的更新了boom.csv和kaboom.csv。。从记事本上复制的
df_merge = pd.merge(df_init,df_compare, on = 'id', how='left')