比较两个csv文件的前两列

时间:2018-02-04 03:43:44

标签: csv

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

1a.csv看起来像这样:

 SKU, QTY
KA005-001,17
KA006-001,46
KA010-001,25
KA014-001,42`

2a.csv看起来像这样:

 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)`

有人可以帮我解决这个问题吗?非常感谢你。

2 个答案:

答案 0 :(得分:1)

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

import pandas as pd
cs1 = pd.read_csv('1a.csv')
cs2 = pd.read_csv('2a.csv')
cs3 = pd.concat([cs1, cs2])

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

 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

现在,您可以通过对“SKU”列进行子集化来使用drop_duplicates()来删除重复的条目。由于您只想保留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')

答案 1 :(得分:0)

你可以这样使用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:

#!/bin/bash

declare -A astr

getDataFromFile(){
    while IFS=, read -r col1 col2
    do
        if [ "$col1" != "SKU" ] && [ "$col1" != "" ]
        then
            (( astr[$col1] = col2 ))
        fi
    done < $1 
}

getDataFromFile 1a.csv
getDataFromFile 2a.csv

echo "SKU,QTY"
for i in "${!astr[@]}"
do   
    echo "$i,${astr[$i]}"
done | sort -t : -k 2n

或Python(也使用关联数组):

#!/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 

https://github.com/tigertv/stackoverflow-answers