如果一个 pandas 数据帧的某个列以特定单词开头,是否可以更改该列的名称?
例如,如果列名以 DEP 开头,则将整个列名更改为 KEEP。
[col for col in df if col.startswith('DEP') then KEEP].
这是可能的,但并不推荐,因为会出现重复的列名:
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
因此,如果选择列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
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
df.columns =
非常关键! - Charles Landaudf['result'] = df[cols].sum(1)
。其中 cols
是您的列列表/数组。 - jpprename
方法。df.rename(columns=lambda x: 'KEEP' if x.startswith('DEP') else x)
您可以将其重新分配给名称df
,也可以使用inplace=True
参数。
DEP
之后的字符以区分您的列标签。原因是,使用重复标签会使许多Pandas功能无法使用,您会丢失信息。df = pd.DataFrame({'DEP123': [1, 2, 3], 'Test': [4, 5, 6],
'DEP983': [7, 8, 9], 'Test2': [10, 11, 12]})
mapper = {col: f'KEEP{col[3:]}' for col in df.filter(regex='^DEP')}
df = df.rename(columns=mapper)
print(df)
KEEP123 KEEP983 Test Test2
0 1 7 4 10
1 2 8 5 11
2 3 9 6 12
我同意jpp的观点,不要使用重复的列名
df.columns=df.columns.str.replace('DEP','KEEP')
df
Out[866]:
KEEP1 B C KEEP2
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