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

如何用Python对比两个CSV文件的列?含数据匹配需求

如何用Python对比两个CSV文件的列并提取匹配行的指定列?

嘿,我来帮你搞定这个CSV列匹配的问题!先聊聊你现有代码里的几个小问题,再给你更高效的解决方案:

原代码的问题

  • 不需要把pd.read_csv()返回的结果再用pd.DataFrame()转换,因为read_csv本身就会返回DataFrame对象,这步完全多余
  • 嵌套两层for循环效率极低,3000行×465行要跑一百多万次循环,完全没必要用这种笨办法
  • 判断条件if DATA2== DATA1是在比较整个DataFrame,不是对应行的列元素,逻辑上根本不对,永远触发不了正确的匹配

高效解决方案(两种方法任选)

你的需求是:找到data1第1列(对应pandas的索引0列)和data2第1列(索引0列)匹配的行,然后输出data1的第3列(索引3列)。用pandas的向量化操作就能轻松搞定,比循环快N倍:

方法1:用isin()筛选(简单直接)

这个方法适合只需要提取目标列的场景:

import pandas as pd

# 读取两个CSV文件,header=None表示没有表头,列从0开始计数
data1 = pd.read_csv("C:/Users/amulya/Desktop/graves lab/main_now.csv", index_col=False, header=None)
data2 = pd.read_csv("C:/Users/amulya/Desktop/graves lab/words.csv", index_col=False, header=None)

# 先拿到data2第0列的所有值,作为匹配的参照
match_criteria = data2[0]

# 筛选data1中第0列存在于match_criteria里的行,然后提取第3列
matching_results = data1[data1[0].isin(match_criteria)][3]

# 输出结果,你可以直接打印整个Series,或者逐行打印
print("匹配到的data1第3列内容:")
print(matching_results)

# 如果需要逐行输出每个值
# for val in matching_results:
#     print(val)

方法2:用merge()合并(适合需要保留更多关联信息的场景)

如果之后你还需要查看匹配行的其他列数据,用合并的方式更灵活:

import pandas as pd

data1 = pd.read_csv("C:/Users/amulya/Desktop/graves lab/main_now.csv", index_col=False, header=None)
data2 = pd.read_csv("C:/Users/amulya/Desktop/graves lab/words.csv", index_col=False, header=None)

# 以第0列为共同键,做内连接(只保留两边都匹配的行)
merged_data = pd.merge(data1, data2, on=0, how="inner")

# 合并后,data1的第3列会被命名为`3_x`(因为data2里也可能有第3列,自动加后缀区分)
matching_results = merged_data["3_x"]

print("匹配到的data1第3列内容:")
print(matching_results)

关键提醒

因为你设置了header=None,所以pandas会把列索引从0开始计数——你说的“第1列”对应索引0,“第3列”对应索引3,这个要注意别搞混哦!

内容的提问来源于stack exchange,提问作者amulya b n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:20:01