如何用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
相关产品推荐
相关产品推荐

