使用Pandas分析数据集:筛选前16列与后16列相等的行
筛选前16列与后16列相等的行
没问题,我来帮你搞定这个筛选需求!你已经完成了数据读取和删除第一列的步骤,接下来只需要添加几行向量化的逻辑代码,就能高效筛选出前16个元素和后16个元素完全相等的行,具体实现如下:
完整可运行代码
import pandas as pd import numpy as np # 读取数据集,指定无表头 data = pd.read_csv('enummixed.txt', header=None, low_memory=False) # 删除第一列 data = data.drop(data.columns[[0]], axis=1) # 核心筛选逻辑 # 提取前16列和后16列数据 first_16_cols = data.iloc[:, :16] last_16_cols = data.iloc[:, 16:] # 生成每行的匹配掩码:只有当该行所有对应位置元素都相等时为True match_mask = first_16_cols.eq(last_16_cols).all(axis=1) # 筛选出符合条件的行 filtered_data = data[match_mask] # 查看筛选结果的前几行(可选) print(filtered_data.head())
代码细节解释
iloc[:, :16]和iloc[:, 16:]:用位置索引快速分割出前16列和后16列,这是pandas处理列分割最高效的方式eq(last_16_cols):逐元素比较两部分数据,返回一个布尔值组成的DataFrame,每个位置表示对应元素是否相等.all(axis=1):对每行的布尔值取逻辑与,只有当该行所有16对元素都相等时,才会返回True- 最后用这个布尔掩码
match_mask去原数据中筛选,就能得到所有符合条件的行
小提示
如果你的数据里存在缺失值(NaN),直接用eq比较会把包含NaN的行判定为不相等。如果需要忽略缺失值的影响,可以先给缺失值填充一个数据中不存在的占位值,比如:
# 用-999填充缺失值后再比较(替换成你数据里没有的数值即可) match_mask = first_16_cols.fillna(-999).eq(last_16_cols.fillna(-999)).all(axis=1)
内容的提问来源于stack exchange,提问作者Aembry Onic
相关产品推荐
相关产品推荐

