You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验列表元素全属于pandas DataFrame列名并按列表筛选列

列名匹配校验与DataFrame列筛选实现

功能说明

你需要的功能可以直接通过以下代码实现,核心逻辑是先校验用户输入的所有列名是否都属于DataFrame现有列的子集,校验通过后再筛选对应列:

完整可运行代码

import pandas as pd

# 初始化示例DataFrame
employees = [('Stuti', 28, 'Varanasi', 20000),
            ('Saumya', 32, 'Delhi', 25000),
            ('Aaditya', 25, 'Mumbai', 40000),
            ('Saumya', 32, 'Delhi', 35000),
            ('Saumya', 32, 'Delhi', 30000),
            ('Saumya', 32, 'Mumbai', 20000),
            ('Aaditya', 40, 'Dehradun', 24000),
            ('Seema', 32, 'Delhi', 70000)
            ]
df = pd.DataFrame(employees, columns=['Name', 'Age','City', 'Salary'])
df = df.set_index('Name')
print("现有DataFrame列名:", list(df.columns))

# 核心校验与筛选逻辑
while True:
    # 获取用户输入,按空格分割为列名列表
    user_input = input('请输入你想要保留的列名,多个列名用空格分隔:')
    user_list = [col.strip() for col in user_input.split() if col.strip()]
    
    # 校验是否为空输入
    if not user_list:
        print("输入不能为空,请重新输入!")
        continue
    
    # 找出所有不匹配的列名
    invalid_cols = [col for col in user_list if col not in df.columns]
    if not invalid_cols:
        # 校验通过,仅保留用户指定的列
        df = df[user_list]
        break
    else:
        print(f"以下列名不存在于DataFrame中:{invalid_cols},请重新输入!")

# 输出最终结果
print("筛选后的DataFrame:")
print(df)

运行效果说明

  • 当输入Age City时,会自动删除Salary列,输出仅保留Age和City的结果
  • 当输入Age Gender时,会提示以下列名不存在于DataFrame中:['Gender'],请重新输入!,要求用户重新输入

原有逻辑修正点

  1. 不能用if user_list in list(df.columns)判断,该语法是判断整个列表是否是另一个列表的单个元素,正确的子集判断可以用set(user_list).issubset(df.columns),或者通过遍历找无效列的方式实现
  2. 筛选列不能用df.columns = user_list,该操作是修改列名而非筛选列,正确写法是df = df[user_list]

内容的提问来源于stack exchange,提问作者Neptune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:45:02