如何对比行序不同的含Domain与IP的CSV文件并找出缺失IP?
用Pandas对比不同字段顺序的CSV,找出缺失IP
核心步骤
- 读取两个CSV文件,明确各自的字段顺序
- 提取目标IP列,用集合优化查询效率
- 筛选出File X中未出现在File Y的IP
- 输出或保存结果
代码实现(附样本数据演示)
假设你的样本数据如下:
File X(dns,ip):
google.com,8.8.8.8
baidu.com,110.242.68.68
example.com,93.184.216.34
File Y(ip,dns):
8.8.8.8,google.com
1.1.1.1,cloudflare.com
110.242.68.68,baidu.com
执行以下代码:
import pandas as pd # 读取CSV文件,注意各自的字段顺序 df_x = pd.read_csv('file_x.csv') # 列:dns, ip df_y = pd.read_csv('file_y.csv') # 列:ip, dns # 可选:清洗IP列,去除可能存在的空格(避免匹配失败) df_x['ip'] = df_x['ip'].str.strip() df_y['ip'] = df_y['ip'].str.strip() # 把File Y的IP转成集合,集合的in操作比列表快很多,适合大数据量 y_ip_set = set(df_y['ip']) # 筛选File X中不在File Y里的IP,转成列表 missing_ips = df_x[~df_x['ip'].isin(y_ip_set)]['ip'].tolist() # 输出结果 print("未匹配到的IP列表:") for ip in missing_ips: print(ip) # 可选:保存结果到新CSV pd.DataFrame({'missing_ip': missing_ips}).to_csv('missing_ips.csv', index=False)
代码解释
df_x[~df_x['ip'].isin(y_ip_set)]:isin()检查IP是否在Y的集合中,~取反,得到所有未匹配的行['ip'].tolist():只提取IP列并转成普通列表,方便查看或后续处理- 用
set()转换Y的IP列:当CSV数据量很大时,集合的查询速度远高于列表,能显著提升效率
内容的提问来源于stack exchange,提问作者QuestioningQuest
相关产品推荐
相关产品推荐

