迭代列并根据规则重命名

时间:2016-04-27 04:42:57

标签: python pandas glob

在以下代码段中,我尝试将某些列(包含'托管会议')重命名为“托管会议[日期]'”。当我打印所有的i时会发生这种情况。但是,它不会将其保存为df。

all_users_sheets_hosts = []

for f in glob.glob("./users-export-*.xlsx"):
    df = pd.read_excel(f)
    all_users_sheets_hosts.append(df)
    j = re.search('(\d+)', f)
    for i in df.columns.values:
        if 'Hosted Meetings' in i:
            i = ('Hosted Meetings' + ' ' + j.group(1))

2 个答案:

答案 0 :(得分:2)

迭代器i是数组值的副本,而不是指针。解决这个问题的一种方法是通过索引enumerate而不是值本身:

for i, val in enumerate(df.columns.values):
    if 'Hosted Meetings' in val:
        df.columns[i] = ('Hosted Meetings' + ' ' + j.group(1))

然而,无论如何,它很好地说明了更具功能性的风格。在您的情况下,您可以将列视为类型为str的pandas系列,因此您可以在其上使用向量化replace,在一个语句中重命名列:

df.columns = df.columns.str.replace('.*Hosted Meeings.*', 
                                    'Hosted Meetings' + ' ' + j.group(1))

答案 1 :(得分:0)

更新上一个答案:

当前答案现在将引发一个例外:索引不支持可变操作

更改:

df.columns[i] = ('Hosted Meetings' + ' ' + j.group(1))

收件人:

df.columns.values[i] = ('Hosted Meetings' + ' ' + j.group(1))