如何让Python代码忽略大小写处理用户输入(含列名与查询指令)
解决代码中列名与查询指令的大小写敏感问题
我懂你的痛点——现在查询指令已经通过lower()处理成小写了,但列名的输入还没做大小写兼容,用户不小心输入"Age"而不是"age"就会直接返回"Data invalid",确实很影响体验。我们只需要做两处关键修改,就能让整个输入逻辑完全忽略大小写:
修改后的完整代码
import pandas as pd # 补充导入pandas,原代码里的read_csv需要用pd.read_csv def answer_question(df, column_name, question): if column_name not in df.columns: return "Data invalid" else: if question == "average": return df[column_name].mean() elif question == "minimum": return df[column_name].min() elif question == "maximum": return df[column_name].max() elif question == "standard deviation": return df[column_name].std() else: return "Sorry, I don't understand your question." file_path = "filepath.csv" df = pd.read_csv(file_path) # 1. 将DataFrame的列名统一转为小写,避免原数据列名大小写混乱的问题 df.columns = df.columns.str.lower() # 2. 将用户输入的列名也转为小写,实现大小写无关匹配 column_name = input("What is the column name?: ").lower() print("What function would you like to perform?: ") question = input().lower() answer = answer_question(df, column_name, question) print(answer)
关键改动说明
- 统一DataFrame列名为小写:
df.columns = df.columns.str.lower()
这一步是为了避免原CSV文件里的列名本身就有大小写混合(比如"Age"、"AGE"、"age"并存)的情况,确保所有列名都是小写格式,方便后续匹配。 - 用户输入列名转小写:
column_name = input(...).lower()
和查询指令的处理逻辑保持一致,把用户输入的列名转为小写,这样不管用户输入"Age"还是"AGE",都会变成"age"去和DataFrame的小写列名匹配。
额外优化建议(可选)
如果想让查询指令的匹配更灵活(比如用户输入"avg"也能识别为"average"),可以把判断逻辑改成用字典映射,比如:
def answer_question(df, column_name, question): if column_name not in df.columns: return "Data invalid" # 用字典存储指令映射,支持别名和大小写无关匹配 func_map = { "average": df[column_name].mean, "avg": df[column_name].mean, "minimum": df[column_name].min, "min": df[column_name].min, "maximum": df[column_name].max, "max": df[column_name].max, "standard deviation": df[column_name].std, "std": df[column_name].std } return func_map.get(question, lambda: "Sorry, I don't understand your question.")()
这样不仅保持了大小写无关,还能支持更多用户习惯的指令别名。
内容的提问来源于stack exchange,提问作者Torinbb2
相关产品推荐
相关产品推荐

