您好,我有一个数据,我想重命名其中一列并选择以t字符串开头的列。
raw_data = {'patient': [1, 1, 1, 2, 2],
'obs': [1, 2, 3, 1, 2],
'treatment': [0, 1, 0, 1, 0],
'score': ['strong', 'weak', 'normal', 'weak', 'strong'],
'tr': [1,2,3,4,5],
'tk': [6,7,8,9,10],
'ak': [11,12,13,14,15]
}
df = pd.DataFrame(raw_data, columns = ['patient', 'obs', 'treatment', 'score','tr','tk','ak'])
df
patient obs treatment score tr tk ak
0 1 1 0 strong 1 6 11
1 1 2 1 weak 2 7 12
2 1 3 0 normal 3 8 13
3 2 1 1 weak 4 9 14
4 2 2 0 strong 5 10 15
Run Code Online (Sandbox Code Playgroud)
所以我尝试遵循python-pandas-renaming-column-name-startswith
df.rename(columns = {'treatment':'treat'})[['score','obs',df[df.columns[pd.Series(df.columns).str.startswith('t')]]]]
Run Code Online (Sandbox Code Playgroud)
但出现这个错误
类型错误:“DataFrame”对象是可变的,因此无法对它们进行哈希处理
如何选择以 开头的列t?
谢谢
Series不需要转换为,但如果想要添加到另一个列列表,请将输出转换为list:
cols = df.columns[df.columns.str.startswith('t')].tolist()
df = df[['score','obs'] + cols].rename(columns = {'treatment':'treat'})
Run Code Online (Sandbox Code Playgroud)
另一个想法是使用 2 个掩码并按位|链接OR:
注意:
列名称是从解决方案中之前的原始列名称中过滤出来的rename,因此以后有必要重命名。
m1 = df.columns.str.startswith('t')
m2 = df.columns.isin(['score','obs'])
df = df.loc[:, m1 | m2].rename(columns = {'treatment':'treat'})
print (df)
obs treat score tr tk
0 1 0 strong 1 6
1 2 1 weak 2 7
2 3 0 normal 3 8
3 1 1 weak 4 9
4 2 0 strong 5 10
Run Code Online (Sandbox Code Playgroud)
如果rename首先需要,有必要通过重命名的列名称重新分配回过滤器:
df = df.rename(columns = {'treatment':'treat'})
df = df.loc[:, df.columns.str.startswith('t') | df.columns.isin(['score','obs'])]
Run Code Online (Sandbox Code Playgroud)