У меня есть датафрейм 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
Ответы:
rename
Показывает , что он принимает Dict как пары дляcolumns
так что вы просто пройти Dict с одной записью.Также смотрите связанные
источник
inplace
параметр, если он игнорирует этот параметр, то это ошибка, можете ли вы выполнить тайминг с параметром и без параметра, также попробуйте что-то подобноеnew_df = df.rename(columns={'new_name':'old_name'})
и посмотрите, быстрее или нетinplace
параметра почти удвоило время с 14 до 26 секунд. Но 14 секунд все еще довольно долго, чтобы просто поменять заголовок ..Гораздо более быструю реализацию можно использовать,
list-comprehension
если вам нужно переименовать один столбец.Если возникает необходимость переименовать несколько столбцов, используйте условные выражения, например:
Или создайте отображение с помощью a
dictionary
и выполните операциюlist-comprehension
with it,get
установив значение по умолчанию в качестве старого имени:Тайминги:
источник
pd.merge_asof()
потому что это выражение :(.От v0.24 +, чтобы переименовать один (или более) столбцов за один раз,
DataFrame.rename()
сaxis=1
илиaxis='columns'
(axis
аргумент был введен вv0.21
.Index.str.replace()
для замены на основе строк / регулярных выражений.Если вам нужно переименовать ВСЕ столбцы одновременно,
DataFrame.set_axis()
метод сaxis=1
. Передайте последовательность, подобную списку. Опции доступны и для модификации на месте.rename
с участиемaxis=1
С 0.21+ вы можете теперь указать
axis
параметр сrename
:(Обратите внимание, что
rename
по умолчанию это не на месте, поэтому вам нужно будет вернуть результат обратно .)Это дополнение было сделано для улучшения согласованности с остальной частью API. Новый
axis
аргумент аналогиченcolumns
параметру - они делают то же самое.rename
также принимает обратный вызов, который вызывается один раз для каждого столбца.Для этого конкретного сценария вы хотели бы использовать
Index.str.replace
Подобно
replace
методу строк в python, pandas Index и Series (только объект dtype) определяют (векторизованный)str.replace
метод для замены на основе строк и регулярных выражений.Преимущество этого перед другими методами в том, что
str.replace
поддерживает регулярные выражения (по умолчанию включено). Смотрите документы для получения дополнительной информации.Передача списка
set_axis
сaxis=1
Вызов
set_axis
со списком заголовков. Длина списка должна быть равна размеру столбцов / индексов.set_axis
по умолчанию изменяет исходный DataFrame, но вы можете указать,inplace=False
возвращать ли измененную копию.Примечание: в будущих выпусках по
inplace
умолчанию будетTrue
.Цепочка методов
Зачем выбирать,
set_axis
когда у нас уже есть эффективный способ назначения столбцовdf.columns = ...
? Как показал Тед Петру в [этом ответе], ( https://stackoverflow.com/a/46912050/4909087 )set_axis
полезно при попытке цепочки методов.сравнить
Против
Первый более естественный и свободно распространяемый синтаксис.
источник
Существует как минимум пять различных способов переименования определенных столбцов в пандах, и я перечислил их ниже вместе со ссылками на оригинальные ответы. Я также рассчитал время этих методов и обнаружил, что они работают примерно одинаково (хотя YMMV зависит от вашего набора данных и сценария). Тест ниже , чтобы переименовать столбцы ,
A
M
N
Z
чтобыA2
M2
N2
Z2
в dataframe с колоннами ,A
чтобыZ
содержащий миллион строк.Вывод:
Используйте наиболее интуитивный для вас метод, который проще всего реализовать в вашем приложении.
источник