有没有办法将列的名称/标题返回到pandas数据帧中的字符串?我想使用一行具有相同前缀的数据。数据帧标题如下所示:
col_00 | col_01 | ... | col_51 | bc_00 | cd_00 | cd_01 | ... | cd_90
我想将函数应用于每一行,但仅分别从col_00
到col_51
和cd_00
到cd_90
。为此,我想我会将列名收集到列表中,fe。 to_work_with
将是以前缀'col'开头的列的列表,将函数应用于df[to_work_with]
。然后我将更改to_work_with
,它将包含以'cd'前缀等开头的列列表。但我不知道如何遍历列名。
所以基本上,我正在寻找的是这个功能:
to_work_with = column names in the df that start with "thisstring"
我该怎么做?谢谢!
答案 0 :(得分:2)
您可以boolean indexing
使用str.startswith
:
cols = df.columns[df.columns.str.startswith('cd')]
print (cols)
Index(['cd_00', 'cd_01', 'cd_02', 'cd_90'], dtype='object')
样品:
print (df)
col_00 col_01 col_02 col_51 bc_00 cd_00 cd_01 cd_02 cd_90
0 1 2 3 4 5 6 7 8 9
cols = df.columns[df.columns.str.startswith('cd')]
print (cols)
Index(['cd_00', 'cd_01', 'cd_02', 'cd_90'], dtype='object')
#if want apply some function for filtered columns only
def f(x):
return x + 1
df[cols] = df[cols].apply(f)
print (df)
col_00 col_01 col_02 col_51 bc_00 cd_00 cd_01 cd_02 cd_90
0 1 2 3 4 5 7 8 9 10
list comprehension
的另一种解决方案:
cols = [col for col in df.columns if col.startswith("cd")]
print (cols)
['cd_00', 'cd_01', 'cd_02', 'cd_90']