重命名包含子字符串的列 - Pandas

Rename column containing substring - Pandas

我需要重命名包含特定子字符串的列。在我的例子中,我使用的数据包含名为特定日期 dd/mm/yyyy 的列。我想根据列名的 yyyy 重命名列(例如 30/06/2020 重命名 FY1920)。

我试过的方法如下:

d.rename(columns = lambda x: 'FY1920' if x.endswith('2019') else x)

也尝试过:

d.columns.str.contains('2019')
d.rename(lambda x:'FY1920' if any(k in x for k in keys) else x, axis=1)

我相信有一个简单的方法。有什么想法吗?

谢谢:)

rename 不能就地工作,你需要把结果赋值回去:

df = pd.DataFrame('x', index=[0, 1], columns=['1/1/2019', '1/1/2020'])
df

  1/1/2019 1/1/2020
0        x        x
1        x        x
df2 = df.rename(columns=lambda c: 'FY1920' if c.endswith('2019') else c)
df2
 
  FY1920 1/1/2020
0      x        x
1      x        x 

另一种选择是使用set_axis或直接赋值:

df.set_axis(
    labels=['FY1920' if c.endswith('2019') else c for c in df], 
    axis=1, 
    inplace=True)
# or 
# df.columns = ['FY1920' if c.endswith('2019') else c for c in df]

df

  FY1920 1/1/2020
0      x        x
1      x        x