【问题标题】:Create variable from string in python在python中从字符串创建变量
【发布时间】:2019-12-02 10:55:57
【问题描述】:

我已经阅读了很多关于这个主题的帖子,但我还没有找到我的问题的答案。

想要编写一个函数,让您可以创建具有不同名称和列的 DF。

所以我试试这个:

def createDT(name,c1,c2,c3):
    name = pd.DataFrame(columns = [c1,c2,c3])
    print(type(name))
    return name
createDT(DT,"col1","col2","col3")

我收到:

NameError: name 'DT' is not defined

当我将“名称”变量更改为字符串时,我会收到消息:

<class 'pandas.core.frame.DataFrame'>
and the table below

这确认了 DF 的创建,但是如果我想调用 DT 变量,我会得到一个

NameError: name 'DT' is not defined

我知道我可以这样做

DT2 = createDT(DT,"col1","col2","col3")

但是我必须再次命名变量,我想避免这种情况并且 我希望它被写成一个函数。关于如何解决它的任何想法?

【问题讨论】:

    标签: python pandas function dataframe variables


    【解决方案1】:

    不幸的是,这并不容易:

    def createDT(name,c1,c2,c3):
        globals()[name] = pd.DataFrame(columns = [c1,c2,c3])
        print(type(globals()[name]))
        return globals()[name]
    createDT("DT","col1","col2","col3")
    

    但首选且有效的解决方案是:

    def createDT(name,c1,c2,c3):
        return pd.DataFrame(columns = [c1,c2,c3])
    createDT("col1","col2","col3")
    

    【讨论】:

    • 非常感谢。您能否向我描述一下问题出在哪里以及以这种方式编写内容是否是一种好的编程习惯?
    • @Kepasere 因为当您执行name = ... 时,它会分配一个名为name 的变量,而不是DT,您也可以接受吗?
    • @Kepasere 这绝对不是一个好习惯,它被认为是一种反模式
    • @juanpa.arrivillaga 添加了一个更好的
    【解决方案2】:

    不简单

    def createDT(c1,c2,c3):
        temp = pd.DataFrame(columns = [c1,c2,c3])
        print(type(temp))
        return temp
    
    DT = createDT("col1","col2","col3")
    

    工作?

    在 Python 中,您(几乎总是)不使用函数参数作为返回值。而且你不必担心复制,因为在 Python 中一切都是(有点像)指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-03
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多