我有两个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)`
有人可以帮我解决这个问题吗?非常感谢你。
答案 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