删除所有列名中的前缀

r_m*_*_me 5 python pandas

我想从数据框中的所有列名中删除前缀。

我尝试创建一个 udf 并在 for 循环中调用它

def remove_prefix(str, prefix):
    if str.startswith(blabla):
        return str[len(prefix):]
    return str

for x in df.columns:
    x.remove_prefix()
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 11

Series.str.replace与正则表达式^一起使用以匹配字符串的开头:

df = pd.DataFrame(columns=['pre_A', 'pre_B', 'pre_predmet'])
df.columns = df.columns.str.replace('^pre_', '')
print (df)
Empty DataFrame
Columns: [A, B, predmet]
Index: []
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是使用列表理解re.sub

import re

df.columns = [re.sub('^pre_',"", x) for x in df.columns]
Run Code Online (Sandbox Code Playgroud)


blu*_*ote 0

使用该rename方法,该方法接受应用于列名称的函数


def remove_prefix(prefix):
    return lambda x: x[len(prefix):]

frame = pd.DataFrame(dict(x_a=[1,2,3], x_b=[4,5,6]))  
frame = frame.rename(remove_prefix('x_'), axis='columns')
Run Code Online (Sandbox Code Playgroud)