如何查找Pandas DataFrame列与字符串列表的差异值
对比DataFrame列与字符串列表找差异值的实现方法
你可以根据后续使用场景选下面两种常用方案,都能得到你预期的{'Fakestate'}结果:
- 方案1:集合差集计算(最简洁,适合快速拿差异值)
集合原生支持差集运算,直接把两个对象转成集合做减法即可,如果你只需要找DataFrame列中存在、但标准列表里不存在的异常值,代码如下:
# 提取DF列独有值 diff = set(flights_df['ORIGINSTATENAME']) - set(states) print(diff) # 输出 {'Fakestate'}
如果你需要找双向差异——也就是两边各自独有的值都列出来(不管是DF里多了还是列表里多了),直接用对称差集方法:
# 提取两边所有非共有值 all_diff = set(flights_df['ORIGINSTATENAME']).symmetric_difference(set(states))
你当前的测试数据里states列表没有额外的独有值,所以运行结果和上面的差集结果一致。
- 方案2:pandas原生isin方法(适合数据清洗场景)
如果你拿到差异值之后还要定位DataFrame里的异常行做修正,直接用isin配合取反操作,既能拿到差异值,也能保留异常行的索引:
# 筛选出州名不在标准列表里的所有行 invalid_mask = ~flights_df['ORIGINSTATENAME'].isin(states) invalid_rows = flights_df[invalid_mask] # 提取差异值 diff = set(invalid_rows['ORIGINSTATENAME'])
注意:如果你的DataFrame该列存在空值,空值会被判定为不在states列表中,会被计入差异结果,清洗前可以先根据业务需求决定是否提前填充或删除空值。
内容的提问来源于stack exchange,提问作者Michael Amos
相关产品推荐
相关产品推荐

