遍历列并根据规则重命名

Iterate through columns and rename according to a rule

在下面的代码片段中,我试图将一些列(包含 Hosted Meetings)重命名为 Hosted Meetings [date]。这就是我打印所有 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))

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

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

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

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

更新上一个答案:

当前答案现在会引发异常:索引不支持可变操作

变化:

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

至:

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