0

以下のデータを含む 1 つの csv ファイルがあります。(、区切り)

C1,C2,C3,C4
1,2,3,4
5,6,7,8

今、私は以下のように他のマッピングcsvファイルを持っています

D1,D2
1,X
5,Y

ここでは、2 番目の csv ファイルでマッピングを見つけ、最初の csv ファイルでその値を更新します。

期待される出力 (最初の csv ファイルの C3 を 2 番目のマッピング ファイルの 2 つのレコードに対して更新する場合)

C1,C2,C3,C4
1,2,X,4
5,6,Y,8
4

4 に答える 4

0

これはうまくいくかもしれません(GNU sed):

sed -r 's|^([^,]*,)(.*)|/^\1/s/[^,]+/\2/3|' file2 | sed -rf - file1
于 2013-02-08T13:00:17.903 に答える
0

を使用する 1 つの方法を次に示しawkます。次のように実行します。

awk -f script.awk mapping data

内容script.awk: 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

別の方法として、次の 1 つのライナーがあります。

awk -F, 'NR==1 { next } FNR==NR { a[$1]=$2; next } FNR>1 { $3 = a[$1] }1' OFS="," mapping data
于 2013-02-08T14:44:05.537 に答える
0

GNU sed の場合:

sed '1d;s%^%/^%;s%,%/s/^([^,]+,[^,]+,)[^,]+/\\1%;s%$%/%' file2 | sed -rf- file1

最初の部分は、2 番目のファイルを file1 に適用できる sed スクリプトに変換します。

于 2013-02-08T10:27:37.917 に答える
0

パンダを使用して PATID 値を UUID 値に置き換える

-- 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
于 2017-06-14T15:43:31.630 に答える