Переименовать один заголовок столбца в панды фрейма данных



у меня есть фрейм данных под названием data. Как бы я переименовал только один заголовок столбца? Например gdp до log(gdp)?



data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
672   3  

3 ответов:

data.rename(columns={'gdp':'log(gdp)'}, inplace=True)

The rename показать, что он принимает dict как param для columns Так что вы просто передаете дикт с одной записью.

см. Также по теме

гораздо быстрее реализация будет использовать list-comprehension если вам нужно переименовать одну колонку.

df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]

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

df.columns = ['log(gdp)' if x=='gdp' else 'cap_mod' if x=='cap' else x for x in df.columns]

или построить отображение с помощью dictionary и выполнить list-comprehension С get операция путем установки значения по умолчанию в качестве старого имени:

col_dict = {'gdp': 'log(gdp)', 'cap': 'cap_mod'}   ## key→old name, value→new name

df.columns = [col_dict.get(x, x) for x in df.columns]

часы работы:

%%timeit
df.rename(columns={'gdp':'log(gdp)'}, inplace=True)
10000 loops, best of 3: 168 µs per loop

%%timeit
df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]
10000 loops, best of 3: 58.5 µs per loop

Панды 0.21+ Ответ

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

  • The rename метод добавил axis параметр, который может быть установлен в columns или 1. Это обновление делает этот метод соответствует остальной части API pandas. Он все еще имеет index и columns параметры, но вы больше не вынуждены использовать их.
  • The set_index метод С inplace значение False позволяет переименовать все метки индекса или столбца со списком.

примеры для панд 0.21+

построить образец фрейма данных:

df = pd.DataFrame({'y':[1,2,8], 'gdp':[2,3,7], 'cap':[5,9,2]}, 
                  columns=['y','gdp', 'cap'])

   cap  gdp  y
0    5    2  1
1    9    3  2
2    2    7  8

используя rename С axis='columns' или axis=1 (новый для 0.21)

df.rename({'gdp':'log(gdp)'}, axis='columns')

или

df.rename({'gdp':'log(gdp)'}, axis=1)

как следствие:

   cap  log(gdp)  y
0    5         2  1
1    9         3  2
2    2         7  8

по-прежнему можно использовать старую подпись метода:

df.rename(columns={'gdp':'log(gdp)'})

в rename функция также принимает функции, которые будут применены к каждому имени столбца.

df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis='columns')

или

df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)

используя set_axis и inplace=False

вы можете предоставить список в set_axis метод, который равен по длине количеству столбцов (или индексу). В настоящее время inplace по умолчанию True, а inplace будет умолчанию False в будущем выпуск.

df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)

или

df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)

почему бы не использовать df.columns = ['cap', 'log(gdp)', 'y']?

нет ничего плохого в назначении столбцов непосредственно так. Это совершенно хорошее решение.

преимущества использования set_axis это то, что он может быть использован как часть цепочки методов и что он возвращает новую копию фрейма данных. Без него вам придется хранить промежуточные шаги цепочки в другой переменной перед переназначением столбцы.

# new for pandas 0.21+
df.some_method1()
  .some_method2()
  .set_axis()
  .some_method3()

# old way
df1 = df.some_method1()
        .some_method2()
df1.columns = columns
df1.some_method3()

Comments

    Ничего не найдено.