Python / Pandas: 根据condition/index重命名DataFrame中的几个列名

Python / Pandas: Renaming several column names in DataFrame based on condition/index

我对 Python 和 Pandas 很陌生。到目前为止试图在论坛上找到答案,但没有成功。

我的问题如下:

例如:

Col1 Col2 Wk 1- Wk 4 01.01.2021 01.02.2021 ...
1111 2222 .......... .......... .......... ...

我想得到以下信息:

Col1 Col2 Wk 1- Wk 4 25.01.2021 25.02.2021 ...
1111 2222 .......... .......... .......... ...

我试图通过使用 df.columns 来解决列索引范围,代码如下:

df.columns[m3_idx:] = df.columns[m3_idx:].str.replace("^01", "25")

其中 m3_idx 是列的索引,重命名应该从这里开始。但是我得到一个 TypeError:

Exception has occurred: TypeError
Index does not support mutable operations

如何处理列索引以指定要更改 headers 的列范围?

EDIT:想法是更改 headers 仅列范围的一部分,因为每月数据列之前的一些“每周数据”列可能会开始相同的字符串“01”,不可更改

I need to rename first 2 characters of the column name string from 01 to (say) 25

您可以使用 pandas.DataFrame.rename:

df = df.rename(lambda x: x[:2].replace("01", "25")+x[2:], axis="columns")    

(上面的x设置为“列”轴的每个名称;名称更改为结果值)。

这是一个仅替换第 m3_idx 列中的名称的变体:

df.rename(columns = lambda x, idx=iter(range(df.columns.size)):
                        x if next(idx) < m3_idx else x[:2].replace("01", "25")+x[2:],
          inplace=True)
Exception has occurred: TypeError
Index does not support mutable operations

此错误是由于赋值的左侧 df.columns[m3_idx:] = ...(右侧起作用)- 我们无法对切片进行赋值。因此,为了使这项工作有效,我们可以构建整个列索引并分配给 df.columns:

df.columns = pd.Index.union(df.columns[:m3_idx],
                            df.columns[m3_idx:].str.replace("^01", "25", regex=True),
                            sort=False)