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

如何根据用户输入选择指定Pandas DataFrame并保存为XLS文件?

解决Python/Pandas根据用户输入选择DataFrame并保存为Excel的问题

你遇到的核心问题很明确:input()获取的是字符串形式的DataFrame名称,但你实际需要的是对应的DataFrame对象——直接用字符串调用to_excel()肯定会触发AttributeError,因为字符串类型根本没有这个方法。下面给你几个实用的解决思路:

方法1:通过全局/局部作用域字典获取对象

Python中,全局变量存储在globals()字典里,局部变量在locals()字典里。你可以通过这个字典根据字符串键获取对应的DataFrame对象:

首先修改你的保存函数,让它直接接收DataFrame对象,还能自定义文件名(更灵活):

import pandas as pd
path = 'C:\\Files\\'

def excel_save(df, filename):
    writer = pd.ExcelWriter(path + filename)
    df.to_excel(writer, 'Sheet1')
    writer.save()

然后在主逻辑里获取并验证对象:

# 假设你已经定义了AAPL等DataFrame
df_name = input('Enter the name of the DataFrame to be saved as XLS ==>')
# 从全局作用域中获取对应名称的对象
target_df = globals().get(df_name)

# 验证获取到的是不是DataFrame
if isinstance(target_df, pd.DataFrame):
    # 用DataFrame的名字作为文件名,更直观
    excel_save(target_df, f"{df_name}.xls")
else:
    print(f"错误:找不到名为'{df_name}'的DataFrame!")

方法2:提前将DataFrame存入字典(更推荐)

直接操作全局变量有一定风险(比如可能误获取到其他无关变量),更安全的方式是提前把所有需要被选择的DataFrame放到一个字典中:

import pandas as pd
import pandas_datareader as pdr
import datetime as dt

path = 'C:\\Files\\'

def excel_save(df, filename):
    writer = pd.ExcelWriter(path + filename)
    df.to_excel(writer, 'Sheet1')
    writer.save()

# 定义DataFrame并存入字典
start = dt.date(2017,12,1)
end = dt.date(2018,1,4)
dfs = {
    'AAPL': pdr.get_data_yahoo('AAPL', start, end),
    # 可以继续添加其他DataFrame,比如'GOOG': pdr.get_data_yahoo('GOOG', start, end)
}

# 主逻辑
df_name = input('Enter the name of the DataFrame to be saved as XLS ==>')
target_df = dfs.get(df_name)

if target_df is not None:
    excel_save(target_df, f"{df_name}.xls")
else:
    print(f"错误:集合中没有名为'{df_name}'的DataFrame!")

为什么你之前用exec的方法无效?

exec()函数的作用是执行一段字符串代码,但它不会返回任何值——所以exec(df_name)只是在解释器中执行了"AAPL"这个变量名,但没有把AAPL对象返回给你,传递给excel_save()的其实是None,自然无法正常保存。同理exec('df_name')也只是执行了变量名本身,没有帮你获取到对应的DataFrame对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:17:40