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

解决AttributeError:将输入字符串转为Pandas DataFrame实现复制

解决办法:将字符串形式的DataFrame名称转换为实际对象

你遇到的问题很常见——当你输入dtf时,程序拿到的只是一个字符串,而不是你定义的那个Pandas DataFrame对象,所以调用.copy()自然会报错(字符串没有这个方法)。要解决这个问题,核心是把输入的字符串映射到对应的变量对象,下面给你两种实用的方案:

方案1:使用全局作用域字典globals()直接获取变量

globals()函数会返回当前全局环境下所有变量的字典,键是变量名(字符串),值就是对应的变量对象。我们可以用输入的字符串作为键,取出实际的DataFrame:

import pandas as pd

# 你的原始DataFrame定义
dtf = pd.DataFrame({'col1' : ['Buenos Dias'], 'col2' : ['Hello'], 'col3' : ['Bonjour']})

def copydf():
    global dfNewName
    dfname_str = input(" Enter dataframe Name :")
    try:
        # 从全局字典中取出对应的DataFrame对象
        target_df = globals()[dfname_str]
        dfNewName = target_df.copy()
        print(f"✅ 成功复制DataFrame:{dfname_str}")
    except KeyError:
        print(f"❌ 错误:找不到名为{dfname_str}的DataFrame,请检查输入!")

运行这个函数时,输入dtf就能正确复制了。加上try-except是为了处理用户输入错误的情况,避免程序直接崩溃。

方案2:用字典管理DataFrame(更安全推荐)

直接操作全局变量虽然方便,但如果你的代码里有很多变量,容易误操作其他对象,安全性不高。更规范的做法是把所有需要操作的DataFrame提前存入一个字典,通过键来访问:

import pandas as pd

# 用字典统一管理你的DataFrame
df_collection = {
    'dtf': pd.DataFrame({'col1' : ['Buenos Dias'], 'col2' : ['Hello'], 'col3' : ['Bonjour']}),
    # 以后新增的DataFrame都可以放在这里
}

def copydf():
    global dfNewName
    dfname_str = input(" Enter dataframe Name :")
    try:
        target_df = df_collection[dfname_str]
        dfNewName = target_df.copy()
        print(f"✅ 成功复制DataFrame:{dfname_str}")
    except KeyError:
        print(f"❌ 错误:字典中没有名为{dfname_str}的DataFrame!")

这种方式的好处是:你可以精确控制哪些DataFrame允许被访问,避免意外修改其他变量,代码结构也更清晰。

为什么你的原始代码会报错?

再帮你回顾下:你的代码里dfname = input(...)得到的是字符串"dtf",而不是变量dtf本身。字符串类型没有.copy()方法,所以会抛出'str' object has no attribute 'copy'的错误。上面的两种方案都是帮你把字符串"dtf"转换成了实际的DataFrame对象,这样就能正常调用.copy()了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:30:37