用pandas数据框索引中的条件替换字符串

时间:2019-02-22 15:52:09

标签: python pandas

我经常使用这种创建或替换列并根据条件分配值的行:

df.loc[df['somecolumn'].str.endswith('_s'), 'somecolumn'] = '_sp'

除了索引列,我想做同样的事情。我的具体问题是如何引用索引列?

df.loc[df.index.str.endswith('_s'), 'index column name?'] = '_sp'

我尝试使用df.index.name,但是它创建了一个新列,而不是更改索引列中的值。

3 个答案:

答案 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)