连接来自两个文件的数据
Concatenating data from two files
有 2 个文件用 Pandas 打开。如果两个文件的第一列有共同部分(彩色字母),我想将第二个文件第二列的数据粘贴到第一个文件的匹配部分。如果没有匹配,我想写'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
使用 join='outer' 查看 pandas 的连接函数(https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html). There is also 问题及其对您有帮助的答案。
它涉及重新索引每个数据框以使用现在称为“0”的列作为索引,然后根据它们的索引连接两个数据框。
另外,我可以建议你 do not paste an image 你的数据框,但以其他人可以测试他们的建议的形式上传数据。
使用Series.str.extract
for new Series
for matched values by df1[0]
values first and then merge with left join in 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
或者如果需要匹配列 df1[0]
的最后 3 个值,请使用:
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)
有 2 个文件用 Pandas 打开。如果两个文件的第一列有共同部分(彩色字母),我想将第二个文件第二列的数据粘贴到第一个文件的匹配部分。如果没有匹配,我想写'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
使用 join='outer' 查看 pandas 的连接函数(https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html). There is also
它涉及重新索引每个数据框以使用现在称为“0”的列作为索引,然后根据它们的索引连接两个数据框。
另外,我可以建议你 do not paste an image 你的数据框,但以其他人可以测试他们的建议的形式上传数据。
使用Series.str.extract
for new Series
for matched values by df1[0]
values first and then merge with left join in 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
或者如果需要匹配列 df1[0]
的最后 3 个值,请使用:
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)