从其他csv文件替换一个csv文件中的列
问题描述:
我有一个csv文件,其中包含以下数据。 (,分隔)从其他csv文件替换一个csv文件中的列
C1,C2,C3,C4
1,2,3,4
5,6,7,8
现在我有其他的映射csv文件,如下
D1,D2
1,X
5,Y
在这里,我想找到第二csv文件映射和更新其在第一个CSV文件中值。
期望输出(如果我想更新第一个CSV文件C3针对第二映射文件中的两个记录)
C1,C2,C3,C4
1,2,X,4
5,6,Y,8
答
试试这个:
awk -F, 'NR==FNR{if(NR>1)k[$1]=$2;next}FNR==1{print}FNR>1&&$1 in k{$3=k[$1];print}' OFS="," two.csv one.csv
与您的数据测试:
kent$ head one.csv two.csv
==> one.csv <==
C1,C2,C3,C4
1,2,3,4
5,6,7,8
==> two.csv <==
D1,D2
1,X
5,Y
kent$ awk -F, 'NR==FNR{if(NR>1)k[$1]=$2;next}FNR==1{print}FNR>1&&$1 in k{$3=k[$1];print}' OFS="," two.csv one.csv
C1,C2,C3,C4
1,2,X,4
5,6,Y,8
+0
嗨,肯特,谢谢。这工作完美。如果我在第一个csv文件中有更多的行与映射不匹配,并且我还想打印这些行,该怎么办? – user2053345
答
使用GNU sed:
sed '1d;s%^%/^%;s%,%/s/^([^,]+,[^,]+,)[^,]+/\\1%;s%$%/%' file2 | sed -rf- file1
第一部分将第二个文件转换为可应用于file1的sed脚本。
答
这可能为你工作(GNU SED):
sed -r 's|^([^,]*,)(.*)|/^\1/s/[^,]+/\2/3|' file2 | sed -rf - file1
答
下面是使用awk
的一种方式。运行,如:中script.awk
awk -f script.awk mapping data
内容: BEGIN { FS = OFS = “” }
NR==1 {
next
}
FNR==NR {
a[$1]=$2
next
}
FNR>1 {
$3 = a[$1]
}1
结果:
C1,C2,C3,C4
1,2,X,4
5,6,Y,8
另外,这里是一个班轮:
awk -F, 'NR==1 { next } FNR==NR { a[$1]=$2; next } FNR>1 { $3 = a[$1] }1' OFS="," mapping data
答
利用大熊猫的UUID更换PATID值的值
-- a.csv
PATID, ADMIT_DATE, ENC_TYPE
pat_1,2011-01-01, AV
pat_2,2012-01-01, IP
pat_3,2013-01-01, EI
-- b.csv
PATID,UUID
pat_1, uuid_xyz
pat_2, uuid_123
pat_3, uuid_abc
- replace.py
import pandas as pd
source_file = 'a.csv'
linkage_file = 'b.csv'
out_file = 'c.csv'
def get_linked_frame(source_file, linkage_file):
df_source = pd.read_csv(source_file, sep=',',
dtype=object,
skipinitialspace=True,
)
df_linkage = pd.read_csv(linkage_file, sep=',',
dtype=object,
skipinitialspace=True,
)
df = pd.merge(df_source, df_linkage, on='PATID')
print("Source frame: \n{}".format(df_source))
df['PATID'] = df['UUID']
df.drop('UUID', axis=1, inplace=True)
return df
df = get_linked_frame(source_file, linkage_file)
df.to_csv(out_file, sep='\t', index=False)
print("Output frame: \n{}".format(df))
-- c.csv
PATID ADMIT_DATE ENC_TYPE
uuid_xyz 2011-01-01 AV
uuid_123 2012-01-01 IP
uuid_abc 2013-01-01 EI
和http://whatHaveYouTried.com?祝你好运。 – shellter