遍历列并根据规则重命名
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))
在下面的代码片段中,我试图将一些列(包含 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))