如何从DataFrame中筛选列名存在于另一Series中的列?
问题解决方法
你的代码触发TypeError: unhashable type: 'Index',是因为df.columns是Pandas的Index对象,str.contains()无法直接接收这种不可哈希的类型,而且逻辑上也没处理A中Animal列的前缀问题。以下是正确的解决步骤:
1. 清洗A中的动物名称
A里的部分Animal值带有前缀(比如a.Bear、123.Giraffe),先剥离前缀,只保留和df列名一致的纯动物名称:
# 按.分割字符串,取最后一部分作为纯净动物名 clean_animals = A['Animal'].str.split('.').str[-1]
处理后clean_animals的结果:
0 Bear 1 Elephant 2 Giraffe 3 Kangaroo Name: Animal, dtype: object
2. 从df中筛选匹配列
有两种简洁的实现方式:
方法一:用intersection直接获取匹配列名
selected_cols = df.columns.intersection(clean_animals) result_df = df.loc[:, selected_cols]
方法二:用布尔索引筛选
# 生成列名是否在纯净动物列表中的布尔掩码 col_mask = df.columns.isin(clean_animals) result_df = df.loc[:, col_mask]
最终结果
运行后result_df将只保留Bear、Elephant、Giraffe、Kangaroo这几列,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

