如果列名包含某些子字符串,如何更改列名?

时间:2018-09-05 04:17:54

标签: python string dataframe

如果列名包含“ _”,我想删除列名的前三个字符。

我当前的列名如下:

US_aaa   NL_bbb   CN_ccc
  abc     def      ghi
  123     345      456

我希望数据看起来像这样:

aaa    bbb    ccc
abc    def    ghi
123    345    456

我当前的代码如下:

for col in category.columns():
    if "_" in col:
        category[col]=category[col][3:]

不确定我在做什么错。

2 个答案:

答案 0 :(得分:2)

此解决方案不关心'_'之后有多少个字符

df = pd.DataFrame([['abc', 'def', 'ghi'], [123, 456, 789]], columns=['US_aaa', 'NL_bbb', 'CN_ccc'])

  US_aaa    NL_bbb  CN_ccc
0   abc def ghi
1   123 456 789

df.columns =[x.split('_')[-1] for x in df.columns]

    aaa bbb ccc
0   abc def ghi
1   123 456 789

如果没有“ _”:

USaaa   NL_bbb  CN_ccc
0   abc def ghi
1   123 456 789

您得到:

USaaa   bbb ccc
0   abc def ghi
1   123 456 789

答案 1 :(得分:1)

您的if语句后的行也不正确,()也不需要df.columns。检查以下代码以获取所需的列名:

df
    US_aaa  NL_bbb  CN_ccc
0   abc     def     ghi
1   123     345     456

df.columns = [col[3:] if '_' in col  else col for col in df.columns]
df.columns
Index(['aaa', 'bbb', 'ccc'], dtype='object')

df
    aaa bbb ccc
0   abc def ghi
1   123 345 456