python - 连接两个文件中的数据
问题描述
用 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
解决方案
使用Series.str.extract
新Series
的值匹配值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)
推荐阅读
- javascript - 开玩笑| test.each 表 | 如何使用 beforeAll 函数中定义的变量配置 test.each 表
- docker - Docker 不为中间阶段生成图像
- reactjs - 在 React 钩子中添加计数器、条件以进行测验
- apache2 - 将fail2ban与网站cloudflare一起使用不起作用
- eclipse - eclipse 2020 querydsl qclasses被删除
- reactjs - AWS放大参数中缺少必需的密钥“appId”
- laravel - 从播种机创建模型时 $fillable 不起作用
- wordpress - 在单个产品页面的标题下方显示产品属性
- oracle11g - 文档 Oracle Transport for Rebus 不存在
- javascript - 动态字符串的可选链接作为 JS 中的属性