Python DataFrame删除含指定值行并提取对应ID的方法问询
解决DataFrame删除含指定值的行并提取对应ID的问题
我来帮你搞定这个需求,其实步骤很清晰,咱们一步步实现:
1. 核心思路
我们需要先识别出包含'-1_-1_-1'的行,然后提取这些行的id,最后从原DataFrame中移除这些行。
2. 完整代码实现
假设你已经导入了pandas并加载了DataFrame(命名为df),完整代码如下:
import pandas as pd # 先构造你提供的测试数据(如果已有df可跳过这部分) data = { 'id': ['a', 'b', 'c', 'd', 'e', 'f'], 'a': ['23_2_1', '3_55_0', '-1_-1_-1', '34_55_0', '34_55_0', '34_55_0'], 'b': ['34_55_0', '34_55_0', '34_55_0', '-1_-1_-1', '34_55_0', '34_55_0'], 'c': ['34_55_0', '34_55_0', '34_55_0', '34_55_0', '34_55_0', '34_55_0'], 'd': ['-1_-1_-1', '34_55_0', '34_55_0', '34_55_0', '34_55_0', '34_55_0'], 'e': ['34_55_0', '34_55_0', '-1_-1_-1', '34_55_0', '34_55_0', '34_55_0'] } df = pd.DataFrame(data) # 步骤1:生成布尔掩码,标记包含'-1_-1_-1'的行 mask = df.isin(['-1_-1_-1']).any(axis=1) # 步骤2:提取包含目标值的行对应的id bad_ids = df.loc[mask, 'id'].tolist() # 步骤3:删除包含目标值的行,得到清理后的DataFrame clean_df = df[~mask].reset_index(drop=True)
3. 代码细节解释
df.isin(['-1_-1_-1']):生成一个和原DataFrame形状一致的布尔矩阵,每个元素标记对应位置的值是否等于目标字符串;.any(axis=1):按行做判断,只要该行有任意一个位置匹配目标值,就返回True,最终得到标记待删除行的布尔序列;df.loc[mask, 'id'].tolist():通过掩码筛选出需要提取的id,转成列表方便后续使用;~mask对掩码取反,筛选出不包含目标值的行,reset_index(drop=True)是为了重置清理后DataFrame的索引,让它更规整。
4. 测试结果
针对你给出的示例数据,运行后:
bad_ids会得到['a', 'c', 'd'](这三个id对应的行都包含'-1_-1_-1');clean_df会保留id为b、e、f的行,这些行里完全没有目标值。
内容的提问来源于stack exchange,提问作者tktktk0711
相关产品推荐
相关产品推荐

