如何按共同列连接行数不同的两个CSV表并保留全部行?
如何合并两个存在非重叠用户的CSV表(全外连接)
你要做的是全外连接(Full Outer Join)——保留两个表里的所有用户,没有对应数据的位置留空。下面给几种不同场景下的实用实现方式:
方法1:用Python Pandas实现(最灵活,适合批量处理)
如果会写点Python代码,用Pandas是最省心的:
import pandas as pd # 读取两个CSV文件,注意根据你的实际文件分隔符调整参数 # 表1是空格分隔,表2是逗号+空格分隔 df_twitter = pd.read_csv('表1.csv', sep='\s+') df_linkedin = pd.read_csv('表2.csv', sep=',\s*') # 按Name列做全外连接 merged_df = pd.merge(df_twitter, df_linkedin, on='Name', how='outer') # 把空值替换成空白字符串(可选,让结果更符合你的期望) merged_df = merged_df.fillna('') # 保存结果到新CSV,用制表符分隔让格式更整齐 merged_df.to_csv('合并结果.csv', index=False, sep='\t')
方法2:用Excel实现(适合非编程用户)
不用写代码,用Excel的函数也能搞定:
- 把两个表分别导入Excel的两个工作表(比如Sheet1存Twitter数据,Sheet2存LinkedIn数据)
- 新建一个工作表,在A1、B1、C1分别输入
Name、Twitter、LinkedIn - 在A2单元格输入公式
=UNIQUE(VSTACK(Sheet1!A:A, Sheet2!A:A)),回车后自动生成所有不重复的用户名 - 在B2单元格输入公式
=XLOOKUP(A2, Sheet1!A:A, Sheet1!B:B, ""),下拉填充所有行,得到对应用户的Twitter链接 - 在C2单元格输入公式
=XLOOKUP(A2, Sheet2!A:A, Sheet2!B:B, ""),下拉填充,得到对应用户的LinkedIn链接 - 最后把结果复制,右键粘贴为「值」,再保存成CSV文件即可
方法3:用命令行工具csvkit实现(适合终端爱好者)
先通过pip安装csvkit:pip install csvkit
然后执行以下命令:
# 先把空格分隔的表1转换成逗号分隔(和表2统一格式) csvformat -d ' ' -D ',' 表1.csv > 表1_逗号版.csv # 按Name列做全外连接,输出结果 csvjoin --outer -c Name 表1_逗号版.csv 表2.csv > 合并结果.csv
内容的提问来源于stack exchange,提问作者grabury
相关产品推荐
相关产品推荐

