如何校验列表元素全属于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'],请重新输入!,要求用户重新输入
原有逻辑修正点
- 不能用
if user_list in list(df.columns)判断,该语法是判断整个列表是否是另一个列表的单个元素,正确的子集判断可以用set(user_list).issubset(df.columns),或者通过遍历找无效列的方式实现 - 筛选列不能用
df.columns = user_list,该操作是修改列名而非筛选列,正确写法是df = df[user_list]
内容的提问来源于stack exchange,提问作者Neptune
相关产品推荐
相关产品推荐

