Я've получили таблицу данных под названием "данные". Как бы мне переименовать только один заголовок столбца? Например ВВП
в журнал(ВВП)
?
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
Гораздо быстрее реализация будет использовать список понимание-если вам нужно переименовать один столбец.
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]
Или, создайте сопоставление с помощью "толкового словаря" и выполнить список-понимание с его'ы сделать
операции по умолчанию значение, так как старое название:
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
как переименовать конкретного столбца в панды?
От v0.24+, чтобы переименовать одну (или более) столбцов одновременно
DataFrame.rename()
с оси=1
или ось='и#39;
(аргумент " оси " был введен в версии v0.21`.
Index.str.replace()
строка/регулярное выражение замены на основе.
Если вам нужно переименовать все колонки сразу,
DataFrame.set_axis()
способ с оси=1
. Передать список-как последовательность. Параметры доступны для изменения на месте, а также. переименовать
с оси=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
С 0.21+ теперь можно указать параметр " оси " с "переименовать":
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
(Заметим, что "переименовать" не в месте по умолчанию, так что вам будет нужно присвоить результат обратно.)
Это дополнение было сделано для улучшения согласованности с остальной частью интерфейса API. Аргумент новой " оси " является аналогом параметра—они столбцы
делать то же самое.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
"переименовать" также принимает обратного вызова, который вызывается один раз для каждого столбца.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Для этого конкретного сценария, вы хотели бы использовать
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
Index.str.replace
Похожие на "заменить" метод строки в Python, индекс панды и серии (объекта только dtype) определяют ул. а (то"построить" в)`.заменить способ для String и regex на основе замены.
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Преимущество над другими методами STR это`.замените поддерживает регулярные выражения (включены по умолчанию). Увидеть Docs для получения дополнительной информации.
set_axis
с оси=1
Называть set_axis с собой список заголовков(ы). В списке должны быть равны по длине колонны/размер индекса. set_axis
видоизменяет исходную таблицу данных по умолчанию, но вы можете указать параметр inplace=false` для возврата измененная копия.
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Примечание: в будущих выпусках, месте
по умолчанию правда
.
Способ Сцепления
Почему выберите set_axis
, когда у нас уже есть эффективный способ присвоения колонны с ДФ.столбцы = ...? Как показали Тед Петроу в [этот ответ],(https://stackoverflow.com/a/46912050/4909087)
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()
Бывший является более естественной и свободной синтаксис.