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

#python #sql #pandas #database #dataframe

#python #sql #pandas #База данных #фрейм данных

Вопрос:

Вот что я делаю, я беру таблицу SQL и читаю ее с помощью pandas:

 import pandas as pd

df = pd.read_sql(query, conn)
 

Будучи «запросом», таблицы, которые я хочу взять из базы данных, и «conn» соединение с базой данных. Запрос, который я делаю, на всякий случай, если вам нужно знать, в основном представляет собой SELECT, в котором я объединяю несколько таблиц и группирую их по количеству и сумме. Что-то вроде этого:

 SELECT p.quantity, sum(s.count)
FROM data_base.stock s
JOIN blah blah
JOIN blah blah
JOIN blah blah
WHERE blah blah
GROUP BY p.quantity
 

Это дает мне такую таблицу:
Общее количество доступных сортов пива:

 **quantity**        **sum**
220             3223
620             5654
315             3455
 

Я хочу, чтобы в таблице не было имен по умолчанию, я хочу их установить, я обнаружил, что следующая строка кода может работать:

 df = df.rename(
 columns={'quantity': 'Presentation (mL)', 'sum':'Available (Unities)'},
 index={'220': '220mL Bottle', '315':'315mL Bottle', '620':'620mL Bottle'}
               )
 

И вот в чем проблема, результирующая таблица отображается следующим образом, индекс не меняется:

 **Presentation(mL)**        **Availale (Unities)**
220                         3223
620                         5654
315                         3455
 

Что я делаю не так?

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

1. Вы уверены, что ваш столбец количества является индексом, а не столбцом?

2. Если «Презентация (mL)» является индексом, и вы хотите переименовать индекс фрейма данных, df.index.name = ‘Презентация (mL)’. Если вы хотите переименовать столбцы, df.rename(столбцы ={«количество»: «количество (мл)», «сумма»: «Доступно (единицы)»})

3. @EmiOB я совершенно уверен, что это так, это документация или примеры, на которых я основываюсь: Переименование фрейма данных Pandas

4. @Alex Я меняю столбцы, и это работает, как вы говорите. Но индексы, которые я хочу изменить, — это «220», «315» и «620», и, как я делаю, это не работает.

5. willyro93, «количество» — это столбец? если это так, пожалуйста, попробуйте с помощью df.set_index(‘Презентация (mL)’)

Ответ №1:

Я смог решить эту проблему, поскольку я хотел изменить значения «220», «315» и «620», все, что мне нужно было сделать, это:

  df["Presentation(mL)"].replace(
                                 {220:"220mL Bottle",
                                  315:"315mL Bottle",
                                  620:"620mL Bottle"},
                                  inplace=True
                               )