如何通过用户输入选择列名,使用pandas和matplotlib绘制散点图
核心问题说明
你猜测的方向是对的,问题就出在动态字符串列名的访问方式不对,两段代码的差异如下:
- 正常运行的代码中,
datafile.Stat_Value属于pandas的属性式列访问,.后面的Stat_Value是固定写死的列名,Python会直接用这个名称去DataFrame中匹配对应列,能正常拿到数据。 - 问题代码中,
input()返回的是字符串类型的列名,存储在xdata、ydata变量中,此时写datafile.xdata,Python会直接去找名称为xdata的列,而不会解析xdata变量里存储的真实列名字符串,自然拿不到绘图所需的列数据。
修复方法
把列访问的写法替换为中括号式动态访问即可,该写法会自动解析变量中存储的字符串作为列名,修改后的代码片段如下:
xdata = input("Enter field for x axies") ydata = input("Enter field for y axies") x = datafile[xdata] y = datafile[ydata]
可选优化
为了避免用户输入不存在的列名导致程序报错,可以增加列名校验逻辑,示例如下:
# 先输出所有可用列名给用户参考 print("当前数据集可用列名:", datafile.columns.tolist()) xdata = input("请输入x轴字段名:") ydata = input("请输入y轴字段名:") if xdata not in datafile.columns or ydata not in datafile.columns: print("输入的字段名不存在,请检查后重新运行程序") else: x = datafile[xdata] y = datafile[ydata] Scatterplot(x, y)
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

