You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于单列合并两个CSV文件的Python脚本中保留未匹配行?

解决方案:基于userId全外连接合并两个CSV文件

我来帮你搞定这个需求!用Python的pandas库就能轻松实现全外连接——也就是保留两个文件里所有的行,不管userId是否匹配,完全符合你的要求。

第一步:先准备好环境

如果你还没装pandas,先打开终端/命令行执行这个命令安装:

pip install pandas

第二步:编写合并脚本

直接用下面的代码,记得把文件路径换成你自己的实际路径就行:

import pandas as pd

# 读取两个CSV文件
# 替换成你的第一个CSV文件路径(用户分组数据)
df_user_groups = pd.read_csv('user_groups.csv')
# 替换成你的第二个CSV文件路径(用户活动数据)
df_user_activity = pd.read_csv('user_activity.csv')

# 核心操作:基于userId做全外连接,保留所有行
merged_data = pd.merge(
    df_user_groups,
    df_user_activity,
    on='userId',  # 指定连接的共同列
    how='outer'   # outer表示保留所有匹配/未匹配的行
)

# 将合并结果保存为新的CSV,index=False是避免写入多余的索引列
merged_data.to_csv('merged_result.csv', index=False)

代码说明

  • how='outer'是最关键的参数:它会把两个文件里的所有行都保留下来。如果某个userId只在其中一个文件里出现,另一个文件对应的列会自动填充为NaN(空值),不会丢失任何数据。
  • 替换文件路径的时候,要是你的文件不在当前脚本的目录下,记得写绝对路径,比如'D:/project_data/user_groups.csv'或者'/Users/xxx/data/user_activity.csv'。

合并后的效果示例

对应你给出的测试数据,合并后的结果会是这样的(部分行展示):

abTestGroupplatformcountryCodeuserIddateActivityproductIdcost
group_controliosGBaaaaaaaaaaa2018-03-02specialpack0.198
group_controliosGBaaaaaaaaaaa2018-03-03specialpack0.498
group_testandroidGBccccccccccc2018-03-02specialpack0.998
NaNNaNNaNbbbbbbbbbbb2018-03-02specialpack0.398

你看,userId为bbbbbbbbbbb的行只在第二个文件里有,合并后就保留了下来,前面的列用NaN填充;而第一个文件里重复的userId也会和第二个文件的匹配行一一对应展开。

内容的提问来源于stack exchange,提问作者Datacrawler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:44:47