首页 > 解决方案 > 连接两个文件中的数据

问题描述

在此处输入图像描述

用 Pandas 打开了 2 个文件。如果两个文件的第一列(彩色字母)中有共同部分,我想将第二个文件的第二列的数据粘贴到第一个文件的匹配部分中。如果没有匹配,我想写'NaN'。在这种情况下我有什么办法吗?

文件 1

enter code here
    0    1
0  JCW  574
1  MBM  4212
2  COP  7424
3  KVI  4242
4  ECX  424

文件2

enter code here
     0      1
0  G=COP  d4ssd5vwe2e2
1  G=DDD  dfd23e1rv515j5o
2  G=FEW  cwdsuve615cdldl
3  G=JCW  io55i5i55j8rrrg5f3r
4  G=RRR  c84sdw5e5vwldk455
5  G=ECX  j4ut84mnh54t65y

文件1#

enter code here
    0    1     2
0  JCW  574   io55i5i55j8rrrg5f3r
1  MBM  4212  NaN
2  COP  7424  d4ssd5vwe2e2
3  KVI  4242  NaN
4  ECX  424   j4ut84mnh54t65y

标签: pythonpandasdataframefilematching

解决方案


使用Series.str.extractSeries的值匹配值df1[0],然后与左连接合并DataFrame.merge

df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)

s = df2[0].str.extract(f'({"|".join(df1[0])})', expand=False)

df = df1.merge(df2[[1]], how='left', left_on=0, right_on=s)
df.columns = np.arange(len(df.columns))
print (df)
     0     1                    2
0  JCW   574  io55i5i55j8rrrg5f3r
1  MBM  4212                  NaN
2  COP  7424         d4ssd5vwe2e2
3  KVI  4242                  NaN
4  ECX   424      j4ut84mnh54t65y

或者,如果需要匹配列的最后 3 个值,请df1[0]使用:

s = df2[0].str.extract(f'({"|".join(df1[0].str[-3:])})', expand=False)

df = df1.merge(df2[[1]], how='left', left_on=0, right_on=s)
df.columns = np.arange(len(df.columns))
print (df)

推荐阅读