我经常使用这种创建或替换列并根据条件分配值的行:
df.loc[df['somecolumn'].str.endswith('_s'), 'somecolumn'] = '_sp'
除了索引列,我想做同样的事情。我的具体问题是如何引用索引列?
df.loc[df.index.str.endswith('_s'), 'index column name?'] = '_sp'
我尝试使用df.index.name,但是它创建了一个新列,而不是更改索引列中的值。
答案 0 :(得分:3)
IIUC,
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,(5,5)), columns=['a_s','b','c_s','d','e'], index=['A','B_s','C','D_s','E_s'])
df.columns = df.columns.str.replace('_s','_sp')
df.index = df.index.str.replace('_s','_sp')
print(df)
输出:
a_sp b c_sp d e
A 51 80 48 93 34
B_sp 96 16 73 15 29
C 27 85 35 93 69
D_sp 92 79 90 71 85
E_sp 4 63 2 77 14
答案 1 :(得分:2)
正如我在评论部分中所述,您确实不需要使用index.str.endswith
,直到严格来说,它需要使用锚点(例如开始^
和结尾为$
)为你做一份工作。
只需考虑@Scott的样品。
df.index.str.replace(r'_s$', '_sp', regex=True)
为了后代,我在这里保留这个答案。
答案 2 :(得分:1)
正如pygo所建议的,这可以完美地完成技巧:
df.index = df.index.str.replace(r'_s$', '_sp', regex=True)