比较两个csv文件的前两列

比较两个csv文件的前两列,csv,Csv,我有两个csv文件,1a.csv和2a.csv 1a.csv如下所示: SKU, QTY KA005-001,17 KA006-001,46 KA010-001,25 KA014-001,42` SKU, QTY KA006-001,81 KA009-001,25 KA010-001,18 KA014-001,45` 2a.csv如下所示: SKU, QTY KA005-001,17 KA006-001,46 KA010-001,25 KA014-001,42` SKU, QTY

我有两个csv文件,1a.csv和2a.csv

1a.csv
如下所示:

 SKU, QTY
KA005-001,17
KA006-001,46
KA010-001,25
KA014-001,42`
 SKU, QTY
KA006-001,81
KA009-001,25
KA010-001,18
KA014-001,45`
2a.csv
如下所示:

 SKU, QTY
KA005-001,17
KA006-001,46
KA010-001,25
KA014-001,42`
 SKU, QTY
KA006-001,81
KA009-001,25
KA010-001,18
KA014-001,45`
我需要一个像这样的新文件
3a.csv

 SKU, QTY
KA005-001,17 
KA006-001,81 (i.e. 2a.csv QTY)
KA009-001,25
KA010-001,18 (i.e. 2a.csv QTY)
KA014-001,45 (i.e. 2a.csv QTY)`
有人能帮我解决这个问题吗?非常感谢。

这个怎么样: 使用pandas连接两个csv文件(假设cs1是第一个csv的数据帧,cs2是第二个csv的数据帧):

现在,两个数据帧相互连接:

 SKU, QTY
KA005-001,17
KA006-001,46
KA010-001,25
KA014-001,42
KA006-001,81
KA009-001,25
KA010-001,18
KA014-001,45
现在,您只需使用
drop_duplicates()
,将子集设置到“SKU”列即可删除重复条目。由于您只想保留cs2中的条目并从cs1中删除这些条目,请使用选项
keep='last'

cs3 = cs3.drop_duplicates(subset='SKU', keep='last')
您现在可以获得:

 SKU, QTY
KA005-001,17 
KA006-001,81
KA009-001,25
KA010-001,18
KA014-001,45
您可以将其保存到csv:

cs3.to_csv('3a.csv')

您可以这样使用awk

awk -F, 'BEGIN{print "SKU,QTY"}NR>1{a[$1] = $2}END{for (i in a) if(i != "SKU")print i","a[i]}' 1a.csv 2a.csv
或具有关联数组的bash 4:


是否总是
2a
重复?@Stephen Rauch…2a.csv是我的主文件,2a中没有的行将从1a开始放在那里,2a QTY列优先于1a标记发生了什么?为什么要同时标记它?我看不到任何语言中的代码。您至少应该自己尝试一下,并在这里询问编码问题。堆栈溢出不是免费的代码编写服务。@iBug…在发布一个问题时,它要求我放置一些标记,所以我这样做了。我尝试了很多东西,比如
diff-W999--side-by-side 1a.csv 2a.csv | sed'/^[^\t]*\t\s*\t\(.*)/{s/\1u/;b}/^\([^\t]*\)\t*\s*\t\(.*\)/{s/\1 N/;b};d'
@Emc2难道你不能用标签代替3个不相关的标签吗?我现在已经为您更正了。@user2969402…我试过了,但得到了这个错误:
Traceback(最近一次调用):文件“problem2_solution.py”,第9行,在cs3=cs3.drop_duplicates(subset='SKU',keep='last')文件/usr/local/lib/python2.7/dist packages/pandages/core/frame.py),第3535行,在drop_duplicates=sef.duplicated中(subset,keep=keep)File“/usr/local/lib/python2.7/dist packages/pandas/core/frame.py”,第3582行,在重复标签中,shape=map(list,zip(*map(f,vals)))value错误:需要超过0个值才能解包
能否将cs3的前几行发布?…
#!/usr/local/lib/python导入pandas作为pd cs1=pd.read_csv('1a.csv'))cs2=pd.read_csv('2a.csv')cs3=pd.concat([cs1,cs2])cs3=cs3.drop_duplicates(subset='SKU',keep='last')cs3.to_csv('3a.csv')
这是我按照您的说明编写的脚本,但cs3从未在文件夹中生成此新文件3a.csv
导入熊猫为pd cs1=pd.read_csv('1a.csv')cs2=pd.read_csv('2a.csv')csv')cs3=pd.concat([cs1,cs2])
只需先使用此部分,然后键入
cs3
并在此处发布控制台输出的前几行内容。我想检查Panda是否正确读取csv文件。根据您使用的标点符号或标题/索引,可能会出现问题。
#!/usr/bin/python

a={}
def getDataFromFile(fname):
    f = open(fname)
    for line in f:
       fields = line.strip().split(",")
       a[fields[0]] = fields[1]

getDataFromFile('1a.csv')
getDataFromFile('2a.csv')

for key, value in a.iteritems():
    print key+","+value