Python 在列重命名中引用ForLoop中的项

Python 在列重命名中引用ForLoop中的项,python,pandas,Python,Pandas,我有两个panda.DataFrame,我希望将一个名为value的列重命名为DataFrame的名称: #Debt level relative to currency strength #preamble import pandas as pd import statsmodels.formula.api as sm #check that this is actually used import os import numpy as np os.chdir('C:\\Users\\pin

我有两个
panda.DataFrame
,我希望将一个名为
value
的列重命名为DataFrame的名称:

#Debt level relative to currency strength
#preamble
import pandas as pd
import statsmodels.formula.api as sm #check that this is actually used
import os
import numpy as np

os.chdir('C:\\Users\\pineapple\\Desktop')

#function construction
def loader(y):
    return pd.read_csv(y, header='infer',  encoding="ISO-8859+-1")

def viewer(x):
    print(x.ix[:])

def delrow(x,y):
    return x[pd.notnull(x[y])]

#
names = ['currency', 'debt_ratio']

for i in names:
    i = loader(''+i+'.csv') #load data
    i = i.replace('..', np.NaN)

    for x in range(2007,2015):
        y = str(x)
        print(y)
        i=delrow(i, '' + y + ' [YR'+y+']') #deletes missing values
        i.rename(columns = {'' + y + ' [YR'+y+']': ''+ y +''}, inplace=True) #rename columns

    i = i.drop(['Series Name','Series Code', 'Country Name', \
         '1990 [YR1990]', '2000 [YR2000]' ], axis = 1)

    i = pd.melt(i, id_vars=['Country Code'],value_vars=['2007','2008','2009','2010','2011', \
    '2012','2013','2014']) #reshape

    i.rename(columns={'variable':'year', 'Country Code':'code'}, inplace=True)
    viewer(i)

    eval(i).rename(columns={'value':i}, inplace=True) #breaks here

    i['id'] = i['code'] + i['year']

    #output
    viewer(i)

这不起作用-它无法更新
列并弄乱数据帧的格式。

您需要使用
eval

MCVE 输出:

   a
0  1
1  2
2  3
3  4

print(b)
   b
0  5
1  6
2  7
3  9
输出:

   a
0  1
1  2
2  3
3  4

print(b)
   b
0  5
1  6
2  7
3  9
更改:

for i in names:
    i = loader(''+i+'.csv') #load data
致:

然后使用以下命令进行重命名:

i.rename(columns={'value':name}, inplace=True)

i
是一个字符串而不是数据帧将
i中的第一个
i
更改为您的熊猫
df
谢谢Scott-这正是我想要它做的;但是,当我将其添加到代码中时,它返回错误:“TypeError:eval()arg 1必须是字符串、字节或代码对象”。我已经更新了我原来的帖子,现在它显示了所有的代码;你能发现错误吗?我必须是一个字符串,而不是数据帧的变量。注意,在我的解决方案中,我创建了一个字符串列表。然后,我使用eval将字符串转换为数据帧的变量。你在for循环中将i重新分配给一堆东西,当你最终调用eval(i)时,它不再是一个字符串,这就解决了它。Scott Boston的答案也适用,但此修复程序的实施速度更快。谢谢两位。