Что означает axis in pandas?
вот мой код для создания таблицы данных:
затем я получил фрейм данных:
когда я набираю commmand:
согласно ссылке панд, axis=1 означает столбцы, и я ожидаю, что результат команды будет
Итак, вот мой вопрос: Что означает axis в панд?
12 ответов
эти ответы помогают объяснить это, но это все еще не совсем интуитивно для не-программиста (т. е. кого-то вроде меня, кто впервые изучает Python в контексте курсовой работы по науке о данных). Я все еще нахожу использование терминов «вдоль» или «для каждого» wrt для строк и столбцов запутанным.
что имеет больше смысла для меня, чтобы сказать это так:
таким образом, среднее по оси 0 будет средним для всех строк в каждом столбце, а среднее по оси 1 будет средним для всех столбцов в каждой строке.
в конечном счете это говорит то же самое, что @zhangxaochen и @Michael, но таким образом, что мне легче усвоить.
axis относится к размерности массива, в случае pd.DataFrame s axis=0 это измерение, которое указывает вниз и axis=1 тот, который указывает направо.
b и a.sum(axis=0) будет выглядеть так
В. Н. в ответе @zhangxaochen я нахожу фразы «вдоль строк» и «вдоль столбцов» немного запутанными. axis=0 следует ссылаться на «вдоль каждого столбца» и axis=1 «по каждой строке».
самый простой способ для меня понять, это поговорить о том, вычисляете ли вы статистику для каждого столбца ( axis = 0 ) или каждой строки ( axis = 1 ). Если вы вычисляете статистику, скажем, среднее значение, с axis = 0 вы получите эту статистику для каждого столбца. Поэтому, если каждое наблюдение является строкой, а каждая переменная находится в столбце, вы получите среднее значение каждой переменной. Если вы установите axis = 1 затем вы вычислите свою статистику для каждой строки. В нашем примере вы получите среднее значение для каждого наблюдения во всех ваших переменных (возможно, вы хотите среднее значение связанных мер).
axis = 0 : по столбцу = по столбцу = вдоль строк
axis = 1 : по строке = по строке = по столбцам
давайте визуализировать (будем помнить всегда),
предположим, для выполнения операции concat() над dataframe1 & dataframe2, мы возьмем dataframe1 & вынем 1-ю строку из dataframe1 и поместим в новый DF, затем мы вынимаем другую строку из dataframe1 и помещаем в новый DF, мы повторяем этот процесс, пока мы достигают дна dataframe1. Затем, мы делаем тот же процесс для dataframe2.
в основном, укладка dataframe2 поверх dataframe1 или наоборот.
например, создание стопки книг на столе или на полу
предположим, для выполнения операции concat() над dataframe1 & dataframe2, мы выберем 1-й полный колонка(a.к. 1-й ряд) dataframe1 и помещаем в новый DF, затем вынимаем второй столбец dataframe1 и держим рядом с ним (вбок), мы должны повторить эту операцию, пока все столбцы не будут закончены. Затем мы повторяем тот же процесс на dataframe2. В основном, укладка dataframe2 сбоку.
например, организация книг на книжной полке.
дизайнер панд, Уэс Маккинни, интенсивно работал над финансовыми данными. Думайте о столбцах как о названиях акций и индексе как о ежедневных ценах. Затем вы можете догадаться, что такое поведение по умолчанию (т. е. axis=0 ) в отношении этих финансовых данных. axis=1 можно просто думать как «другое направление».
аналогично, индексация квадратных скобок относится к столбцам, так как чаще выбирать запас вместо выбора дня.
ось с точки зрения программирования-это позиция в кортеже формы. Вот пример:
среднее значение на оси приведет к удалению этого измерения.
ссылаясь на исходный вопрос, форма dff равна (1,2). Использование axis=1 изменит форму на (1,).
axis = 0 означает вверх-вниз axis = 1 означает слева направо
данный пример принимает сумму всех данных в столбце = = key.
мое мышление: ось = n, где n = 0, 1 и т. д. означает, что матрица свернута (сложена) вдоль этой оси. Таким образом, в 2D-матрице, когда вы сворачиваете вдоль 0 (строк), вы действительно работаете с одним столбцом за раз. Аналогично для матриц более высокого порядка.
это основано на ответе @Safak. Лучший способ понять оси в pandas / numpy-создать 3D-массив и проверить результат функции sum по 3 различным осям.
теперь проверьте сумму элементов массива по каждой из осей:
даст вам следующие результаты:
массивы конструированы с так называемой осью=0 и рядками расположенными вертикально против оси=1 и столбцами расположенными горизонтально. Axis относится к измерению массива.
это означает, что он взял среднее значение, основанное на каждом столбце, axis=0 даст вам то, что вы думаете, но axis=1 дает
Ось Numpy в Python С подробными Примерами
Эта статья дает очень краткое представление о реализации оси numpy в программах python и частном случае оси numpy для 1D массивов.
Ось Numpy в Python С подробными Примерами
Здравствуйте программисты, в сегодняшней статье мы обсудим и объясним ось Numpy в python. Понять использование осей в массиве Numpy не очень просто. Но давайте начнем с этого. Ось Numpy очень похожа на оси в декартовой системе координат. Прежде чем мы начнем с того, как Numpy axes, позвольте мне немного подробнее познакомить вас с концепцией Numpy axis.
Ось Numpy-это тип направления, через которое начинается итерация. Каждая операция в numpy имеет определенный итерационный процесс, через который она проходит. Кроме того, существует два типа итерационного процесса: порядок столбцов и порядок Фортрана. Порядок столбцов помогает через ось столбцов, а порядок Fortran помогает через ось строк.
Направления оси Numpy
Ось 0 (Направление вдоль строк) – Ось 0 называется первой осью массива Numpy. Эта ось 0 проходит вертикально вниз вдоль строк многомерных массивов Numpy, то есть выполняет операции по столбцам.
Ось 1 (Направление вместе со столбцами ) – Ось 1 называется второй осью многомерных массивов Numpy. В результате ось 1 суммируется по горизонтали вместе со столбцами массивов. Он выполняет операции по строкам.
ПРИМЕЧАНИЕ: Приведенное выше описание оси Numpy предназначено только для 2D-и многомерных массивов. Он работает по-другому для 1D-массивов, обсуждаемых далее в этой статье.
Способы реализации оси Numpy в Python
Строки и столбцы для массива Numpy
ОБЪЯСНЕНИЕ:
В приведенном выше примере мы перечисляем данные каждой строки и столбца. Другими словами, мы достигаем этого, получая доступ к ним через их индекс. Данные[0, 0] дают значение в первой строке и первом столбце. Кроме того, data[0,:] дает значения в первой строке и во всех столбцах, например, полную первую строку в нашей матрице. Аналогично, data[:, 0] обращается ко всем строкам первого столбца. Прежде всего, при печати строк массива ось Numpy устанавливается в 0, то есть data.shape[0]. Аналогично, ось Numpy устанавливается в 1 при перечислении столбцов.
Ось Numpy в Python для Sum
Когда мы используем функцию numpy sum() для 2-d массива с параметром axis, она сворачивает 2-d массив до 1-d массива. Он сворачивает данные и уменьшает количество измерений. Но какая ось свернется, чтобы вернуть сумму, зависит от того, установим ли мы ось в 0 или 1. Давайте рассмотрим следующие примеры для лучшего понимания.
Numpy sum с осью 0
Объяснение:
В приведенном выше примере мы создаем массив размера(2,3), то есть две строки и три столбца. Когда ось установлена на 0. Сразу же функция фактически суммирует столбцы. В результате получается новый массив NumPy, содержащий сумму каждого столбца. Как обсуждалось ранее, ось 0-это направление вдоль строк, но выполняет операции по столбцам. Ось, установленная в 0, относится к агрегированию данных. Поэтому мы сворачиваем строки и выполняем операцию суммирования по столбцам. Таким образом, параметр оси функции sum() представляет, какая ось должна быть свернута.
Numpy Sum С Осью 1
Как мы знаем, ось 1, согласно конвенции оси. Например, это относится к направлению вдоль столбцов, выполняющих операции над строками. Для функции sum (). Параметр axis-это ось, которая должна быть свернута. Отсюда и в приведенном выше примере. Например, ось установлена на 1 в функции sum (), которая сворачивает столбцы и суммирует строки.
Ось Numpy для конкатенации двух массивов
Параметр axis, который мы используем с функцией numpy concatenate (), определяет ось, вдоль которой мы складываем массивы. Мы получаем различные типы сцепленных массивов в зависимости от того, установлено ли значение параметра оси равным 0 или 1. Кроме того, чтобы иметь более четкое представление о том, что говорится, обратитесь к приведенным ниже примерам.
Конкатенация Np массивов с осью 0
Объяснение:
Как уже упоминалось, параметр axis в функции ‘concatenate()’ подразумевает укладку массивов. Поэтому, когда мы устанавливаем ось в 0, функция concatenate складывает два массива вдоль строк. Мы указываем, что хотим конкатенации массивов. Конкатенация выполняется вдоль оси 0, то есть вдоль направления строк. Таким образом, мы получаем результат в виде сложенного массива. И два составных массива вдоль рядов.
Конкатенация массивов Numpy с осью 1
Объяснение:
В приведенном выше примере параметр axis имеет значение 1. Например, мы знаем, что ось 1 определяет направление вместе со столбцами. Прежде всего это подразумевает функцию numpy concatenate() для объединения двух входных данных href=”https://en.wikipedia.org/wiki/Array_data_structure”>массивы. После этого конкатенация выполняется горизонтально вместе со столбцами. href=”https://en.wikipedia.org/wiki/Array_data_structure”>массивы. После этого конкатенация выполняется горизонтально вместе со столбцами.
1D Массив NP Axis в Python – Особый случай
Оси numpy работают по-разному для одномерных массивов. Большая часть обсуждения, которое мы провели в этой статье, относится к двумерным массивам с двумя осями- строками и столбцами. Массивы 1D отличаются тем, что они имеют только одну ось. Оси Numpy нумеруются так же, как индексы Python, то есть они начинаются с 0. Поэтому в массиве 1D первой и единственной осью является ось 0. Если мы зададим параметр axis как 1 при работе с 1D массивами. Кроме того, он возвращает ошибку.
Оси numpy работают по-разному для одномерных массивов. Большая часть обсуждения, которое мы провели в этой статье, относится к двумерным массивам с двумя осями- строками и столбцами. Массивы 1D отличаются тем, что они имеют только одну ось. Оси Numpy нумеруются так же, как индексы Python, то есть они начинаются с 0. Поэтому в массиве 1D первой и единственной осью является ось 0. Если мы зададим параметр axis как 1 при работе с 1D массивами. Кроме того, он возвращает ошибку.
Объяснение:
Как уже упоминалось выше, 1-мерные массивы имеют только одну ось – ось 0. Функция работает правильно, когда параметр оси установлен в 1. Он печатает “а” как комбинированный 1D-массив из двух входных 1D-массивов. В 1D массивах ось 0 не указывает вдоль строк “вниз”, как это происходит в 2-мерном массиве. Однако, когда параметр axis установлен в 1, он не может напечатать “b”. В заключение он поднял indexerror, заявив, что ось 1 находится за пределами границ для одномерных массивов.
Вывод
В заключение можно сказать, что в этой статье мы очень подробно рассмотрели Numpy axes в python. Ось Numpy в python используется для реализации различных операций по строкам и столбцам. Такие операции, как numpy sum (), np mean() и concatenate (), достигаются путем передачи осей numpy в качестве параметров. Мы также можем перечислять данные массивов по их строкам и столбцам с помощью оси numpy. Также выделен частный случай оси для одномерных массивов. Это необходимо иметь в виду при реализации программ на python.
Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
What does axis in pandas mean?
Here is my code to generate a dataframe:
then I got the dataframe:
When I type the commmand :
According to the reference of pandas, axis=1 stands for columns and I expect the result of the command to be
So here is my question: what does axis in pandas mean?
26 Answers 26
These answers do help explain this, but it still isn’t perfectly intuitive for a non-programmer (i.e. someone like me who is learning Python for the first time in context of data science coursework). I still find using the terms «along» or «for each» wrt to rows and columns to be confusing.
What makes more sense to me is to say it this way:
So a mean on axis 0 will be the mean of all the rows in each column, and a mean on axis 1 will be a mean of all the columns in each row.
Ultimately this is saying the same thing as @zhangxaochen and @Michael, but in a way that is easier for me to internalize.
Let’s visualize (you gonna remember always),
Suppose, to perform concat() operation on dataframe1 & dataframe2, we will take dataframe1 & take out 1st row from dataframe1 and place into the new DF, then we take out another row from dataframe1 and put into new DF, we repeat this process until we reach to the bottom of dataframe1. Then, we do the same process for dataframe2.
Basically, stacking dataframe2 on top of dataframe1 or vice a versa.
E.g making a pile of books on a table or floor
Suppose, to perform concat() operation on dataframe1 & dataframe2, we will take out the 1st complete column(a.k.a 1st series) of dataframe1 and place into new DF, then we take out the second column of dataframe1 and keep adjacent to it (sideways), we have to repeat this operation until all columns are finished. Then, we repeat the same process on dataframe2. Basically, stacking dataframe2 sideways.
E.g arranging books on a bookshelf.
More to it, since arrays are better representations to represent a nested n-dimensional structure compared to matrices! so below can help you more to visualize how axis plays an important role when you generalize to more than one dimension. Also, you can actually print/write/draw/visualize any n-dim array but, writing or visualizing the same in a matrix representation(3-dim) is impossible on a paper more than 3-dimensions.
axis refers to the dimension of the array, in the case of pd.DataFrame s axis=0 is the dimension that points downwards and axis=1 the one that points to the right.
a.sum(axis=0) is equivalent to
b and a.sum(axis=0) will both look like this
N.B. In @zhangxaochen’s answer, I find the phrases «along the rows» and «along the columns» slightly confusing. axis=0 should refer to «along each column», and axis=1 «along each row».
The easiest way for me to understand is to talk about whether you are calculating a statistic for each column ( axis = 0 ) or each row ( axis = 1 ). If you calculate a statistic, say a mean, with axis = 0 you will get that statistic for each column. So if each observation is a row and each variable is in a column, you would get the mean of each variable. If you set axis = 1 then you will calculate your statistic for each row. In our example, you would get the mean for each observation across all of your variables (perhaps you want the average of related measures).
axis = 0 : by column = column-wise = along the rows
axis = 1 : by row = row-wise = along the columns
Let’s look at the table from Wiki. This is an IMF estimate of GDP from 2010 to 2019 for top ten countries. 
Note: The above code will work only after setting «Country(or dependent territory)» column as the Index, using set_index method.
Axis in view of programming is the position in the shape tuple. Here is an example:
Mean on the axis will cause that dimension to be removed.
Referring to the original question, the dff shape is (1,2). Using axis=1 will change the shape to (1,).
The designer of pandas, Wes McKinney, used to work intensively on finance data. Think of columns as stock names and index as daily prices. You can then guess what the default behavior is (i.e., axis=0 ) with respect to this finance data. axis=1 can be simply thought as ‘the other direction’.
Similarly, the square brackets indexing refers to the columns since it’s more common to pick a stock instead of picking a day.
The problem with using axis= properly is for its use for 2 main different cases:
The main idea behind this answer is that for avoiding the confusion, we select either a number, or a name for specifying the particular axis, whichever is more clear, intuitive, and descriptive.
Pandas is based on NumPy, which is based on mathematics, particularly on n-dimensional matrices. Here is an image for common use of axes’ names in math in the 3-dimensional space:


And now, my recommendation:
If you want to compute an accumulated value, you may compute it from values located along axis 0 (or along axis 1) — use axis=0 (or axis=1 ).
Моя шпаргалка по pandas
Один преподаватель как-то сказал мне, что если поискать аналог программиста в мире книг, то окажется, что программисты похожи не на учебники, а на оглавления учебников: они не помнят всего, но знают, как быстро найти то, что им нужно.
Возможность быстро находить описания функций позволяет программистам продуктивно работать, не теряя состояния потока. Поэтому я и создал представленную здесь шпаргалку по pandas и включил в неё то, чем пользуюсь каждый день, создавая веб-приложения и модели машинного обучения.
1. Подготовка к работе
Если вы хотите самостоятельно опробовать то, о чём тут пойдёт речь, загрузите набор данных Anime Recommendations Database с Kaggle. Распакуйте его и поместите в ту же папку, где находится ваш Jupyter Notebook (далее — блокнот).
Теперь выполните следующие команды.
После этого у вас должна появиться возможность воспроизвести то, что я покажу в следующих разделах этого материала.
2. Импорт данных
▍Загрузка CSV-данных
Здесь я хочу рассказать о преобразовании CSV-данных непосредственно в датафреймы (в объекты Dataframe). Иногда при загрузке данных формата CSV нужно указывать их кодировку (например, это может выглядеть как encoding=’ISO-8859–1′ ). Это — первое, что стоит попробовать сделать в том случае, если оказывается, что после загрузки данных датафрейм содержит нечитаемые символы.
▍Создание датафрейма из данных, введённых вручную
Это может пригодиться тогда, когда нужно вручную ввести в программу простые данные. Например — если нужно оценить изменения, претерпеваемые данными, проходящими через конвейер обработки данных.
Данные, введённые вручную
▍Копирование датафрейма
Копирование датафреймов может пригодиться в ситуациях, когда требуется внести в данные изменения, но при этом надо и сохранить оригинал. Если датафреймы нужно копировать, то рекомендуется делать это сразу после их загрузки.
3. Экспорт данных
▍Экспорт в формат CSV
При экспорте данных они сохраняются в той же папке, где находится блокнот. Ниже показан пример сохранения первых 10 строк датафрейма, но то, что именно сохранять, зависит от конкретной задачи.
4. Просмотр и исследование данных
▍Получение n записей из начала или конца датафрейма
Сначала поговорим о выводе первых n элементов датафрейма. Я часто вывожу некоторое количество элементов из начала датафрейма где-нибудь в блокноте. Это позволяет мне удобно обращаться к этим данным в том случае, если я забуду о том, что именно находится в датафрейме. Похожую роль играет и вывод нескольких последних элементов.
Данные из начала датафрейма
Данные из конца датафрейма
▍Подсчёт количества строк в датафрейме
▍Подсчёт количества уникальных значений в столбце
Для подсчёта количества уникальных значений в столбце можно воспользоваться такой конструкцией:
▍Получение сведений о датафрейме
В сведения о датафрейме входит общая информация о нём вроде заголовка, количества значений, типов данных столбцов.
Сведения о датафрейме
▍Вывод статистических сведений о датафрейме
Знание статистических сведений о датафрейме весьма полезно в ситуациях, когда он содержит множество числовых значений. Например, знание среднего, минимального и максимального значений столбца rating даёт нам некоторое понимание того, как, в целом, выглядит датафрейм. Вот соответствующая команда:
Статистические сведения о датафрейме
▍Подсчёт количества значений
Для того чтобы подсчитать количество значений в конкретном столбце, можно воспользоваться следующей конструкцией:
Подсчёт количества элементов в столбце
5. Извлечение информации из датафреймов
▍Создание списка или объекта Series на основе значений столбца
Это может пригодиться в тех случаях, когда требуется извлекать значения столбцов в переменные x и y для обучения модели. Здесь применимы следующие команды:
Результаты работы команды anime[‘genre’].tolist()
Результаты работы команды anime[‘genre’]
▍Получение списка значений из индекса
Результаты выполнения команды
▍Получение списка значений столбцов
Вот команда, которая позволяет получить список значений столбцов:
Результаты выполнения команды
6. Добавление данных в датафрейм и удаление их из него
▍Присоединение к датафрейму нового столбца с заданным значением
Иногда мне приходится добавлять в датафреймы новые столбцы. Например — в случаях, когда у меня есть тестовый и обучающий наборы в двух разных датафреймах, и мне, прежде чем их скомбинировать, нужно пометить их так, чтобы потом их можно было бы различить. Для этого используется такая конструкция:
▍Создание нового датафрейма из подмножества столбцов
Это может пригодиться в том случае, если требуется сохранить в новом датафрейме несколько столбцов огромного датафрейма, но при этом не хочется выписывать имена столбцов, которые нужно удалить.
Результат выполнения команды
▍Удаление заданных столбцов
Этот приём может оказаться полезным в том случае, если из датафрейма нужно удалить лишь несколько столбцов. Если удалять нужно много столбцов, то эта задача может оказаться довольно-таки утомительной, поэтому тут я предпочитаю пользоваться возможностью, описанной в предыдущем разделе.
Результаты выполнения команды
▍Добавление в датафрейм строки с суммой значений из других строк
Результат выполнения команды
Команда вида df.sum(axis=1) позволяет суммировать значения в столбцах.
7. Комбинирование датафреймов
▍Конкатенация двух датафреймов
Эта методика применима в ситуациях, когда имеются два датафрейма с одинаковыми столбцами, которые нужно скомбинировать.
В данном примере мы сначала разделяем датафрейм на две части, а потом снова объединяем эти части:
Датафрейм, объединяющий df1 и df2
▍Слияние датафреймов
Результаты выполнения команды
8. Фильтрация
▍Получение строк с нужными индексными значениями
Индексными значениями датафрейма anime_modified являются названия аниме. Обратите внимание на то, как мы используем эти названия для выбора конкретных столбцов.
Результаты выполнения команды
▍Получение строк по числовым индексам
Следующая конструкция позволяет выбрать три первых строки датафрейма:
Результаты выполнения команды
▍Получение строк по заданным значениям столбцов
Для получения строк датафрейма в ситуации, когда имеется список значений столбцов, можно воспользоваться следующей командой:
Результаты выполнения команды
Если нас интересует единственное значение — можно воспользоваться такой конструкцией:
▍Получение среза датафрейма
Эта техника напоминает получение среза списка. А именно, речь идёт о получении фрагмента датафрейма, содержащего строки, соответствующие заданной конфигурации индексов.
Результаты выполнения команды
▍Фильтрация по значению
Из датафреймов можно выбирать строки, соответствующие заданному условию. Обратите внимание на то, что при использовании этого метода сохраняются существующие индексные значения.
Результаты выполнения команды
9. Сортировка
Для сортировки датафреймов по значениям столбцов можно воспользоваться функцией df.sort_values :
Результаты выполнения команды
10. Агрегирование
▍Функция df.groupby и подсчёт количества записей
Вот как подсчитать количество записей с различными значениями в столбцах:
Результаты выполнения команды
▍Функция df.groupby и агрегирование столбцов различными способами
▍Создание сводной таблицы
Для того чтобы извлечь из датафрейма некие данные, нет ничего лучше, чем сводная таблица. Обратите внимание на то, что здесь я серьёзно отфильтровал датафрейм, что ускорило создание сводной таблицы.
Результаты выполнения команды
11. Очистка данных
▍Запись в ячейки, содержащие значение NaN, какого-то другого значения
Таблица, содержащая значения NaN
Результаты замены значений NaN на 0
12. Другие полезные возможности
▍Отбор случайных образцов из набора данных
Результаты выполнения команды
▍Перебор строк датафрейма
Следующая конструкция позволяет перебирать строки датафрейма:
Результаты выполнения команды
▍Борьба с ошибкой IOPub data rate exceeded
Если вы сталкиваетесь с ошибкой IOPub data rate exceeded — попробуйте, при запуске Jupyter Notebook, воспользоваться следующей командой:
Итоги
Здесь я рассказал о некоторых полезных приёмах использования pandas в среде Jupyter Notebook. Надеюсь, моя шпаргалка вам пригодится.











