Изменить конкретный столбец на имена строк в Pandas

Я вижу, что об этом спрашивали на этом сайте здесь. Заимствовал идеи из этого поста, но в моем случае не работает. Я читаю некоторые данные из листа Excel и пытаюсь преобразовать их в фрейм данных Pandas с индексом столбца и строки. Первая строка - это заголовок года в Excel, и я попытался сделать его заголовком столбца, выполнив df.columns=df.iloc[0].

Поэтому, когда я запускаю df.columns, он возвращается: Index([None, 2014.0, 2015.0, 2016.0, 2017.0, 2018.0], dtype='object', name=0)Изменить конкретный столбец на имена строк в Pandas

Моя проблема теперь состоит в том, чтобы преобразовать столбец с названиями месяцев как названиями строк. я пытался

df.set_index('None',inplace=True)

Но это возвращает KeyError: 'None'

  1. Почему я не могу назвать «Нет», поскольку это одно из имен столбцов.
  2. Как мне преобразовать названия этих месяцев, которые можно было бы вызвать для построения графиков, в xaxis позже? любой формат даты и времени?

Редактировать: Добавление образца данных здесь

Обновление: я решил это с помощью df.columns = ['Month', 2014, 2015, 2016, 2017, 2018] и df.drop(df.index[0])

Можно ли поделиться образцом Excel с помощью Dropbox, googledocs или аналогичного? Потому что это кажется проблемой, связанной с данными.

jezrael 26.09.2018 13:38

да, только что добавил.

W_YY 26.09.2018 15:34

Вы можете проверить мой ответ?

jezrael 26.09.2018 15:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
1 108
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Для меня хорошо работает, добавьте 2 параметра - index_col=[0] для преобразования первого столбца в index и usecols с range для выбора всех столбцов без столбца Unnamed:

df = pd.read_excel('sample.xlsx', usecols=range(1, 100))

print (df)
   Unnamed: 0  2014  2015       2016   2017   2018
0         Jan  42.9  47.2  43.000000  43.00  48.98
1         Feb  36.6  45.0  40.300000  43.00  45.92
2         Mar  37.8  42.8  44.805668  43.00  43.00
3         Apr  40.9  44.4  43.900000  41.30  44.46
4         May  40.5  47.1  44.200000  41.97  42.31
5         Jun  41.8  46.9  44.600000  45.70    NaN
6         Jul  40.5  45.0  43.500000  45.49    NaN
7         Aug  44.3  45.0  43.800000  44.59    NaN
8         Sep  43.8  47.3  47.600000  47.25    NaN
9         Oct  44.2  47.0  47.600000  50.08    NaN
10        Nov  44.2  43.7  50.078663  50.93    NaN
11        Dec  48.8  45.5  46.500000  48.37    NaN

df = pd.read_excel('sample.xlsx', index_col=[0], usecols = range(1, 100))

print (df)
     2014  2015       2016   2017   2018
Jan  42.9  47.2  43.000000  43.00  48.98
Feb  36.6  45.0  40.300000  43.00  45.92
Mar  37.8  42.8  44.805668  43.00  43.00
Apr  40.9  44.4  43.900000  41.30  44.46
May  40.5  47.1  44.200000  41.97  42.31
Jun  41.8  46.9  44.600000  45.70    NaN
Jul  40.5  45.0  43.500000  45.49    NaN
Aug  44.3  45.0  43.800000  44.59    NaN
Sep  43.8  47.3  47.600000  47.25    NaN
Oct  44.2  47.0  47.600000  50.08    NaN
Nov  44.2  43.7  50.078663  50.93    NaN
Dec  48.8  45.5  46.500000  48.37    NaN

Или выберите второй столбец для индекса и удалите столбец Unnamed: 0:

df = pd.read_excel('sample.xlsx', index_col=[1])

print (df)
     Unnamed: 0  2014  2015       2016   2017   2018
Jan         NaN  42.9  47.2  43.000000  43.00  48.98
Feb         NaN  36.6  45.0  40.300000  43.00  45.92
Mar         NaN  37.8  42.8  44.805668  43.00  43.00
Apr         NaN  40.9  44.4  43.900000  41.30  44.46
May         NaN  40.5  47.1  44.200000  41.97  42.31
Jun         NaN  41.8  46.9  44.600000  45.70    NaN
Jul         NaN  40.5  45.0  43.500000  45.49    NaN
Aug         NaN  44.3  45.0  43.800000  44.59    NaN
Sep         NaN  43.8  47.3  47.600000  47.25    NaN
Oct         NaN  44.2  47.0  47.600000  50.08    NaN
Nov         NaN  44.2  43.7  50.078663  50.93    NaN
Dec         NaN  48.8  45.5  46.500000  48.37    NaN

df = pd.read_excel('sample.xlsx', index_col=[1]).drop('Unnamed: 0', axis=1)

print (df)
     2014  2015       2016   2017   2018
Jan  42.9  47.2  43.000000  43.00  48.98
Feb  36.6  45.0  40.300000  43.00  45.92
Mar  37.8  42.8  44.805668  43.00  43.00
Apr  40.9  44.4  43.900000  41.30  44.46
May  40.5  47.1  44.200000  41.97  42.31
Jun  41.8  46.9  44.600000  45.70    NaN
Jul  40.5  45.0  43.500000  45.49    NaN
Aug  44.3  45.0  43.800000  44.59    NaN
Sep  43.8  47.3  47.600000  47.25    NaN
Oct  44.2  47.0  47.600000  50.08    NaN
Nov  44.2  43.7  50.078663  50.93    NaN
Dec  48.8  45.5  46.500000  48.37    NaN

Спасибо, Джезраэль. что именно делает usecols = range (1, 100)? проверил документацию, но объяснений нет. Я пробовал методы других людей, но трудно избавиться от этой ненужной строки, когда заголовок года становится строкой в ​​фрейме данных.

W_YY 26.09.2018 16:11

@W_YY - Ответ отредактирован, usecols - фильтр - столбцы по именам, очевидно, но возможны и позиции прохода, можно проверить с помощью df = pd.read_excel('sample.xlsx', usecols=[1,2,4])

jezrael 26.09.2018 16:18

Я думаю, вы предоставили другой путь, чтобы избежать проблемы. Я использовал openpyxl import load_workbook вместо pd.read_excel.

W_YY 26.09.2018 16:51

Вы можете переименовать свои столбцы следующим образом:

df.columns = ['None', 2014.0, 2015.0, 2016.0, 2017.0, 2018.0]

Теперь ваша команда должна работать

Спасибо! Я только что изменил 2014.0 на 2014 как название года. Метод работал, чтобы установить столбец месяца в качестве имен индекса строки. И теперь индекс df выглядит так: Index ([None, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', ' Oct ',' Nov ',' Dec '], dtype =' object ', name =' Месяц ')

W_YY 26.09.2018 15:48

Однако возникла новая проблема, когда ненужная строка не может быть удалена с помощью вызова df.drop ([0])

W_YY 26.09.2018 15:51

Попробуй так

df.set_index(df.None)
Ответ принят как подходящий

С именем столбца «Никто» вы не можете установить его как индекс, поэтому, чтобы установить этот столбец как индекс, сначала переименуйте этот столбец.

df.columns.values[0]='First'

А затем установите его как индекс как -:

df.set_index('First')

Другие вопросы по теме