更改列名称pandas

fre*_*rtz 5 python pandas

如果它以某个单词开头,是否可以更改pandas数据框中列的名称.

ee如果列以DEP开头,则将全名更改为KEEP.

[col for col in df if col.startswith('DEP') then KEEP].
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 7

是否可行,但不推荐,因为获取重复的列名称:

df = pd.DataFrame({
        'DEP1':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'DEP2':list('aaabbb')
})

print (df)
  DEP1  B  C DEP2
0    a  4  7    a
1    b  5  8    a
2    c  4  9    a
3    d  5  4    b
4    e  5  2    b
5    f  4  3    b

df.columns = ['KEEP' if col.startswith('DEP') else col for col in df]
print (df)
  KEEP  B  C KEEP
0    a  4  7    a
1    b  5  8    a
2    c  4  9    a
3    d  5  4    b
4    e  5  2    b
5    f  4  3    b
Run Code Online (Sandbox Code Playgroud)

那么如果选择列,KEEP它将返回DataFrame中的所有重复列:

print (df['KEEP'])
  KEEP KEEP
0    a    a
1    b    a
2    c    a
3    d    b
4    e    b
5    f    b
Run Code Online (Sandbox Code Playgroud)

因此,如果要过滤所有列,请DEP使用filter正则表达式^来启动字符串:

df1 = df.filter(regex='^DEP')
#alternative solution
#df1 = df.loc[:, df.columns.str.startswith('DEP')]
print (df1)
  DEP1 DEP2
0    a    a
1    b    a
2    c    a
3    d    b
4    e    b
5    f    b
Run Code Online (Sandbox Code Playgroud)

  • 那个`df.columns =`是至关重要的! (2认同)

piR*_*red 5

您可以将可调用对象传递给 rename

df.rename(columns=lambda x: 'KEEP' if x.startswith('DEP') else x)
Run Code Online (Sandbox Code Playgroud)

您可以将其重新分配给名称,df也可以使用inplace=True参数。