pandas 使用正则表达式模式重命名多个列

问题描述 投票:0回答:2

我有一个如下所示的数据框

ID,US-Test1,US-Test2,US-Test3
1,11,12,13
2,13,16,18
3,15,19,21

我想从我的所有列名称中删除关键字

US - 

我尝试了以下方法,但应该有更好的方法来做到这一点

newNames = {
    'US-Test1':'Test1',
    'US-Test2':'Test2'
}
df.rename(columns=newNames,inplace=True)

但是我的真实数据有 70 多列,这效率不高。

任何正则表达式方法可以根据正则表达式重命名列以排除模式并仅保留我想要的内容?

我希望我的输出如下所示

ID,Test1,Test2,Test3
1,11,12,13
2,13,16,18
3,15,19,21
python pandas dataframe numpy series
2个回答
5
投票

您可以使用开头匹配“US-”的正则表达式,如下所示:

df.columns = df.columns.str.replace("^US-", "", regex=True)

它将匹配的“US-”替换为空字符串。

此外,如果您知道要转换的列,您可以对其名称应用切片以删除前 3 个字符:

df.columns = df.columns.str.slice(3)

当然,这会影响与您的条件不匹配的列(即不以“US-”开头)


1
投票

解决问题的方法有很多。除了使用正则表达式之外,一种可能的方法是使用列表理解来获取不带前 3 个字符的新列名称,如下所示:

import pandas as pd

df = pd.DataFrame({
    'US-Test1': [11, 13, 15],
    'US-Test2': [13, 16, 18],
    'US-Test3': [13, 18, 21]
})

new_columns = [col[3:] for col in df.columns]
print(new_columns)
# ['Test1', 'Test2', 'Test3']

df.columns = new_columns
print(df)

输出:

   Test1  Test2  Test3
0     11     13     13
1     13     16     18
2     15     18     21
© www.soinside.com 2019 - 2024. All rights reserved.