在以下代码段中,我尝试将某些列(包含'托管会议')重命名为“托管会议[日期]'”。当我打印所有的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))
答案 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))