Как изменить несколько имен столбцов в pandas в соответствии с критерием

#python #pandas

#python #pandas

Вопрос:

У меня есть такой фрейм данных —

 Country|1980 YR1980|1981 YR1981|1982 YR 1982|...
     A | 1         |  -        |   2        |...
     B | -         |  1        |   2.5      |...
     c | -         |  0.433    |   4.7      |...
 

Моя цель — удалить из имен столбцов: YR …. part. На самом деле я хочу визуализировать данные и иметь годы на моей оси Y и страны на оси X и сопоставить точки данных с таблицей.

Другая идея — построить карту мира и сделать слайдер ниже на годы.

И я понимаю, что в любом случае нам нужны годы, чтобы быть целыми числами.

В моей таблице указаны годы в диапазоне от 1980 до 2013 (всего 33)

Я пытался сделать это:

 list1= [i for i in range(33)]
new_Index=[str(i) for i in list1]
df = df.iloc[:,1:34].columns= new_Index
 

Но получил ошибку:

 ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-6cf1843506e9> in <module>()
      1 list1= [i for i in range(33)]
      2 new_Index=[str(i) for i in list1]
----> 3 df = df.iloc[:,1:34].columns= new_Index

AttributeError: 'list' object has no attribute 'iloc' 

Кто-нибудь может мне помочь, пожалуйста.

Комментарии:

1. вы просто хотите удалить ‘YR’ и то, что следует за частью из имен столбцов?

2. Да, — как и в 1980 YR1980, я хочу сохранить только начальный 1980 и удалить YR1980

3. хорошо, пожалуйста, проверьте ниже и дайте мне знать, работает ли это.

Ответ №1:

Если нужны значения столбцов перед первым использованием пробела str.split с выбором по str :

 df.columns = df.columns.str.split().str[0]
 

Если нужны заданные значения, используйте списки, объединенные :

 #exclude 2013
df.columns = df.columns[:1].tolist()   list(range(1980, 2013))

#include 2013
#df.columns = df.columns[:1].tolist()   list(range(1980, 2014))
 

Ответ №2:

Я думаю, это должно сработать:

 x = df.columns.tolist()
new_cols = [x.split()[-1].strip('YR') for x in x]