如何在Python DataFrame中仅保留列值在指定列表中的行?
筛选DataFrame中ID属于指定列表的行
你之前写的df.loc[(df['ID'] in surv3)]会报错,原因是df['ID']是Pandas的Series对象,直接用in没法对整个Series做逐元素的匹配判断,得用Pandas专门的isin()方法来实现批量校验。
正确的写法有两种,效果一致:
- 直接用布尔索引:
df = df[df['ID'].isin(surv3)]
- 用
loc索引(更规范,推荐用于明确的行筛选):
df = df.loc[df['ID'].isin(surv3)]
isin()会生成一个布尔值组成的Series,每个值对应原DataFrame的一行,标记该行的ID是否在surv3列表里,用这个结果做索引就能保留所有符合条件的行,包括重复的ID记录。
如果是要删除ID不在列表里的行,只需要给isin()的结果加个取反符号~:
df = df[~df['ID'].isin(surv3)]
内容的提问来源于stack exchange,提问作者aurora
相关产品推荐
相关产品推荐

