#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]