【问题标题】:Use variable in for loop as dataframe column name [duplicate]在for循环中使用变量作为数据框列名[重复]
【发布时间】:2018-11-14 16:25:23
【问题描述】:

我正在尝试使用 for 循环遍历列名列表,并在每次迭代时根据字符串前缀和原始列名(存储在列表中)创建一个新列。问题是数据框认为变量是帧中的一个系列

cols_to_transform = ['Price','Km_From_CBD','Local_Median_Price', 'AreaSize']

for x in cols_to_transform:
    df.x #This is where the problem
    df[x] = df[x>1]
    newcolname = ('T1_Pre_'+ x)
    df.newcolname = df.x + 1 #and same problem here 

(DataFrame'对象没有属性'x')

(DataFrame'对象没有属性'newcolname')

理想情况下,我应该有一个“全局变量”或参数来覆盖预期的 pandas 对象,并将变量的内容作为列名而不是变量本身。

我不能使用 pandas apply,因为除了创建列之外,我还需要创建一系列显示转换变化的子图。

我知道我可以将整行代码转换为字符串,然后使用 exec,但我真的无法做到这一点,因为这感觉像是一种廉价的工作。

提前致谢! 这也是我的第一个问题,请放轻松:)

【问题讨论】:

    标签: python pandas loops for-loop series


    【解决方案1】:

    试试这个代码:

    cols_to_transform = ['Price','Km_From_CBD','Local_Median_Price', 'AreaSize']
    
    for x in cols_to_transform:
        df[x]
    
        newcolname = ('T1_Pre_'+ x)
        df.newcolname = df[x] + 1 
    

    【讨论】:

    • 是的,这是对我发布的问题的一个很好的解决方案,但是它会在我的实际代码中产生其他问题。在循环内部我有: df[x] = df[[x] >1] 这不起作用。我知道有两种不同的方法可以访问 pandas 数据帧( df.name 和 df['name'] )我相信这使用了第二种方法。您知道我可以使用您的方法执行此类操作的方法吗? (我会更新问题)。谢谢
    • 您能否详细说明您要使用以下命令实现什么目标:df[x] = df[[x] >1] ?
    • 我正在对列进行 boxcox 转换并使用该转换的结果创建一个新列,其中一些列的值为 0,这是 box cox 不喜欢的。最终我问的是什么 jpp 标记为重复
    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2020-04-05
    • 2017-02-13
    相关资源
    最近更新 更多