10 приемов Python Pandas, которые сделают вашу работу более эффективной
Pandas — это широко используемый пакет Python для структурированных данных. Существует много хороших учебных пособий на данную тематику, но здесь мы бы хотели раскрыть несколько интересных приемов, которые, вероятно, еще пока неизвестны читателю, но могут оказаться крайне полезными.
read_csv
Все знают эту команду. Но если данные, которые вы пытаетесь прочитать, слишком большие, попробуйте добавить команду nrows = 5 , чтобы прочитать сначала небольшую часть данных перед загрузкой всей таблицы. В этом случае вам удастся избежать ситуации выбора неверного разделителя (не всегда в данных есть разделение в виде запятой).
(Или вы можете использовать команду ‘head’ в linux для проверки первых 5 строк в любом текстовом файле: head -c 5 data.txt )
Затем вы можете извлечь список столбцов, используя df.columns.tolist() , а затем добавить команду usecols = [‘c1’, ‘c2’,…], чтобы извлечь только нужные вам столбцы. Кроме того, если вы знаете типы данных определенных столбцов, вы можете добавить dtype = для более быстрой загрузки. Еще одно преимущество этой команды в том, что если у вас есть столбец, который содержит как строки, так и числа, рекомендуется объявить его тип строковым, чтобы не возникало ошибок при попытке объединить таблицы, используя этот столбец в качестве ключа.
select_dtypes
Если предварительная обработка данных должна выполняться в Python, то эта команда сэкономит ваше время. После чтения из таблицы типами данных по умолчанию для каждого столбца могут быть bool, int64, float64, object, category, timedelta64 или datetime64. Вы можете сначала проверить распределение с помощью
df.dtypes.value_counts()
чтобы узнать все возможные типы данных вашего фрейма, затем используйте
df.select_dtypes(include=[‘float64’, ‘int64’])
чтобы выбрать субфрейм только с числовыми характеристиками.
сopy
Это важная команда. Если вы сделаете:
import pandas as pd
df1 = pd.DataFrame(< ‘a’:[0,0,0], ‘b’: [1,1,1]>)
df2 = df1
df2[‘a’] = df2[‘a’] + 1
df1.head()
Вы обнаружите, что df1 изменен. Это потому, что df2 = df1 не делает копию df1 и присваивает ее df2, а устанавливает указатель, указывающий на df1. Таким образом, любые изменения в df2 приведут к изменениям в df1. Чтобы это исправить, вы можете сделать либо:
df2 = df1.copy ()
from copy import deepcopy
df2 = deepcopy(df1)
map
Это классная команда для простого преобразования данных. Сначала вы определяете словарь, в котором «ключами» являются старые значения, а «значениями» являются новые значения.
level_map =
df[‘c_level’] = df[‘c’].map(level_map)
Например: True, False до 1, 0 (для моделирования); определение уровней; определяемые пользователем лексические кодировки.
apply or not apply?
Если нужно создать новый столбец с несколькими другими столбцами в качестве входных данных, функция apply была бы весьма полезна.
def rule(x, y):
if x == ‘high’ and y > 10:
return 1
else:
return 0
df = pd.DataFrame(< 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]>)
df['new'] = df.apply(lambda x: rule(x['c1'], x['c2']), axis = 1)
df.head()
В приведенных выше кодах мы определяем функцию с двумя входными переменными и используем функцию apply, чтобы применить ее к столбцам ‘c1’ и ‘c2’.
но проблема «apply» заключается в том, что иногда она занимает очень много времени.
Скажем, если вы хотите рассчитать максимум из двух столбцов «c1» и «c2», конечно, вы можете применить данную команду
df[‘maximum’] = df.apply(lambda x: max(x[‘c1’], x[‘c2’]), axis = 1)
но это будет медленнее, нежели:
df[‘maximum’] = df[[‘c1’,’c2']].max(axis =1)
Вывод: не используйте команду apply, если вы можете выполнить ту же работу используя другие функции (они часто быстрее). Например, если вы хотите округлить столбец ‘c’ до целых чисел, выполните округление (df [‘c’], 0) вместо использования функции apply.
value counts
Это команда для проверки распределения значений. Например, если вы хотите проверить возможные значения и частоту для каждого отдельного значения в столбце «c», вы можете применить
df[‘c’].value_counts()
Есть несколько полезных приемов / функций:
A. normalize = True : если вы хотите проверить частоту вместо подсчетов.
B. dropna = False : если вы хотите включить пропущенные значения в статистику.
C. sort = False : показать статистику, отсортированную по значениям, а не по количеству.
D. df[‘c].value_counts().reset_index().: если вы хотите преобразовать таблицу статистики в датафрейм Pandas и управлять ими.
количество пропущенных значений
При построении моделей может потребоваться исключить строку со слишком большим количеством пропущенных значений / строки со всеми пропущенными значениями. Вы можете использовать .isnull () и .sum () для подсчета количества пропущенных значений в указанных столбцах.
import pandas as pd
import numpy as np
df = pd.DataFrame(< ‘id’: [1,2,3], ‘c1’:[0,0,np.nan], ‘c2’: [np.nan,1,1]>)
df = df[[‘id’, ‘c1’, ‘c2’]]
df[‘num_nulls’] = df[[‘c1’, ‘c2’]].isnull().sum(axis=1)
df.head()
выбрать строки с конкретными идентификаторами
В SQL мы можем сделать это, используя SELECT * FROM… WHERE ID в («A001», «C022»,…), чтобы получить записи с конкретными идентификаторами. Если вы хотите сделать то же самое с pandas, вы можете использовать:
df_filter = df ['ID']. isin (['A001', 'C022', . ])
df [df_filter]
Percentile groups
Допустим, у вас есть столбец с числовыми значениями, и вы хотите классифицировать значения в этом столбце по группам, скажем, топ 5% в группу 1, 5–20% в группу 2, 20–50% в группу 3, нижние 50% в группу 4. Конечно, вы можете сделать это с помощью pandas.cut, но мы бы хотели представить другую функцию:
import numpy as np
cut_points = [np.percentile(df[‘c’], i) for i in [50, 80, 95]]
df[‘group’] = 1
for i in range(3):
df[‘group’] = df[‘group’] + (df[‘c’] < cut_points[i])
# or Которая быстро запускается (не применяется функция apply).to_csv
Опять-таки, это команда, которую используют все. Отметим пару полезных приемов. Первый:print(df[:5].to_csv())Вы можете использовать эту команду, чтобы напечатать первые пять строк того, что будет записано непосредственно в файл.
Еще один прием касается смешанных вместе целых чисел и пропущенных значений. Если столбец содержит как пропущенные значения, так и целые числа, тип данных по-прежнему будет float, а не int. Когда вы экспортируете таблицу, вы можете добавить float_format = '%. 0f', чтобы округлить все числа типа float до целых чисел. Используйте этот прием, если вам нужны только целочисленные выходные данные для всех столбцов – так вы избавитесь от всех назойливых нулей ‘.0’ .
Как применить функцию к выбранным столбцам в Pandas
Вы можете использовать следующий синтаксис, чтобы применить функцию к одному или нескольким столбцам pandas DataFame:
#divide values in *column1* by 2 df['column1'] = df['column1'] / 2 #divide values in *column1* and *column2* by 2 df[['column1', 'column2']] = df[['column1', 'column2']] / 2 #divide values in every column of DataFrame by 2 df = df / 2
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1. Применение функции к одному столбцу
В следующем коде показано, как применить функцию только к одному столбцу DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points rebounds assists 0 10 7 11 1 12 7 8 2 12 8 10 3 14 13 6 4 13 7 6 5 18 4 5 #divide values in *points* column by 2 df['points'] = df['points'] / 2 #view updated DataFrame df points rebounds assists 0 5.0 7 11 1 6.0 7 8 2 6.0 8 10 3 7.0 13 6 4 6.5 7 6 5 9.0 4 5
Пример 2. Применение функции к определенным столбцам
В следующем коде показано, как применить функцию к определенным столбцам DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points rebounds assists 0 10 7 11 1 12 7 8 2 12 8 10 3 14 13 6 4 13 7 6 5 18 4 5 #divide values in *points* and *rebounds* column by 2 df[['points', 'rebounds']] = df[['points', 'rebounds']] / 2 #view updated DataFrame df points rebounds assists 0 5.0 3.5 11 1 6.0 3.5 8 2 6.0 4.0 10 3 7.0 6.5 6 4 6.5 3.5 6 5 9.0 2.0 5
Пример 3. Применение функции ко всем столбцам
В следующем коде показано, как применить функцию к каждому столбцу DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points rebounds assists 0 10 7 11 1 12 7 8 2 12 8 10 3 14 13 6 4 13 7 6 5 18 4 5 #divide values in every column by 2 df = df / 2 #view updated DataFrame df points rebounds assists 0 5.0 3.5 5.5 1 6.0 3.5 4.0 2 6.0 4.0 5.0 3 7.0 6.5 3.0 4 6.5 3.5 3.0 5 9.0 2.0 2.5
Как в pandas сделать список на основании данных нескольких столбцов?
Нужно добавить еще один столбец, в котором будут данные по следующей логике.
Если в столбце movie 9999999, то берется значение из столбца rating, если в rating 9999999, то name
попробовал написать следующий код, но как мне кажется идея в корне не верна, поэтому я тут.kol = [] for l in df: for i in l: if i['movie'] != 9999999: k = i['movie'] elif i['rating'] != 9999999: k = i['rating'] else: k = i['name'] kol.append(k) df['sum'] = kol
- Вопрос задан более двух лет назад
- 90 просмотров
1 комментарий
Простой 1 комментарий
Алан Гибизов @phaggi Куратор тега Python
Вам что, для задания выдали мало букв? Как насчёт поименовать переменные внятно, чтоб было понятно в чем суть всех этих l, i…
Решения вопроса 2
Можно вынести вычисления в функцию и применить apply.
import pandas as pd df = pd.DataFrame() def process(row): result = row['movie'] if row['movie'] == 9999999: if row['rating'] == 9999999: result = row['name'] else: result = row['rating'] return result df['sum'] = df.apply(process, axis=1)
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Не надо в пандасе использовать циклы - это медленно и некрасиво, т.к. пандас - векторный по своей сути. Потому что основан на нампае. Так что используй подходящий инструмент из нампая. Для фильтрации по значениям столбцов - это функция numpy.where , которую можно вкладывать в себя, как обычные условные операторы:
import numpy as np import pandas as pd if __name__ == '__main__': df = pd.DataFrame(< 'movie': [9999999, 2, 3, 1, 9999999], 'rating': [9999999, 2, 9999999, 9999999, 3], 'name': [1, 2, 4, 5, 10]>) df['result'] = np.where( df['movie'] != 9999999, df['movie'], np.where( df['rating'] != 9999999, df['rating'], df['name'])) print(df)
movie rating name result 0 9999999 9999999 1 1 1 2 2 2 2 2 3 9999999 4 3 3 1 9999999 5 1 4 9999999 3 10 3
7 основных способов для управления столбцами в Pandas
Когда дело доходит до анализа данных, Pandas является наиболее используемой библиотекой Python для обработки и подготовки данных для дальнейшего анализа и машинного обучения.
Реальность такова, что Pandas — действительно гибкая библиотека, и её можно использовать даже для преобразования форматов файлов.
Однако, даже если мы используем некоторые функции Pandas едва ли не каждый день, мы тратим много времени на интернет-сёрфинг (поиск ответов на то, как что-то сделать в Pandas?).
Но давайте будем честными: некоторые функции трудно запомнить потому, что мы можем достичь одной и той же цели разными способами. Так что нечего стыдиться, если мы каждый день гуглим одни и те же вещи.
Тем не менее, экономия времени — это всегда хорошая идея. По этой причине в этой статье мы рассмотрим 7 основных способов для управления столбцами в Pandas. Таким образом, вам больше не нужно будет их гуглить: вам просто нужно сохранить эту статью (возможно, в закладках) и возвращаться к ней всякий раз, когда она вам понадобится.
Вот что вы найдете здесь:
Как создать новый столбец в Pandas
Как переименовать столбец в Pandas
Как добавить новый столбец во фрейм данных Pandas
Как удалить столбец в Pandas
Как найти уникальные значения в столбце Pandas
Как преобразовать столбец Pandas в список
Как отсортировать фрейм данных Pandas по столбцам
Как создать новый столбец в Pandas
Прежде всего, давайте вспомним, что столбец Pandas также называется Pandas Series. Это означает, что фрейм данных Pandas представляет собой упорядоченный набор рядов.
Есть несколько способов создать новый столбец Pandas. Давайте посмотрим их все!
Создайте столбец Pandas как Pandas Series
Правильный метод создания столбца Pandas, который, как считается, «живёт» сам по себе, — это метод Series, который мы рассматриваем ниже:
# Create a Pandas series series = pd.Series([6, 12, 18, 24]) # Print Pandas series print(series) >>> 0 6 1 12 2 18 3 24 dtype: int64
Я сказал «правильный метод», потому что, как мы уже говорили, столбец Pandas — это то же самое что Pandas Series. Итак, если нам нужен только один столбец, мы должны использовать этот метод, если нам хочется быть «формально правильными».
Создайте столбец Pandas как фрейм данных Pandas
Однако реальность такова, что столбец сам по себе нам понадобится нечасто.
Итак, ещё один способ создать столбец в Pandas — создать новый фрейм данных только с одним столбцом: таким образом, мы могли бы мгновенно обогатить его другими столбцами.
Мы можем сделать это так:
import pandas as pd # Create a Pandas column as a Pandas data frame df = pd.DataFrame(<'A': [1, 2, 3, 4]>) # Print Pandas data frame print(df) >>> A 0 1 1 2 2 3 3 4'A':>
Отличие от предыдущего примера в том, что в этом случае столбец Pandas также имеет имя. В данном случае мы назвали его «А».
ПРИМЕЧАНИЕ: Если мы более внимательно посмотрим на то, что мы здесь сделали, увидим, что мы можем создать фрейм данных Pandas как словарь. Фактически, «A» — это ключ, и он разделён списком значений через двоеточие. Затем и ключи, и значения находятся внутри фигурных скобок.
Создайте столбец Pandas как фрейм данных Pandas, начиная с массива NumPy
Одной из сверхспособностей Pandas является то, что он может «принимать» массивы NumPy в качестве входных значений. Другими словами, мы можем создать фрейм данных, начиная с массива NumPy.
В случае одного столбца мы можем создать одномерный массив и преобразовать его во фрейм данных: в результате получится фрейм данных с одним столбцом.
Мы можем сделать это так:
import numpy as np import pandas as pd # Create a NumPy array values = np.array([5, 10, 15, 20]) # Transform array into Pandas data frame df = pd.DataFrame(values) # Print data frame print(df) >>> 0 0 5 1 10 2 15 3 20
Как добавить новый столбец во фрейм данных Pandas
Возможность добавить новый столбец во фрейм данных Pandas каким-то образом связана с созданием нового столбца.
Я имею в виду, что сначала нам нужно создать фрейм данных Pandas, затем один столбец Pandas, затем нам нужно добавить столбец в фрейм данных.
В этом случае у нас также есть несколько возможностей сделать это. Давайте посмотрим их все.
Добавление нового столбца во фрейм данных Pandas: стандартный метод
Стандартный метод добавления нового столбца во фрейм данных Pandas — создать фрейм данных, далее создать отдельный столбец, а затем добавить его во фрейм данных.
Мы будем использовать этот метод во всех следующих примерах. Итак, вот как мы можем это сделать:
import pandas as pd # Create a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 4]>) # Add a new column by using a list of values df['B'] = [20, 30, 40, 50] # Print data frame print(df) >>> A B 0 1 20 1 2 30 2 3 40 3 4 50'A':>
Давайте пошагово разберем, что мы сделали:
- Мы создали фрейм данных Pandas с помощью метода pd.DataFrame().
- Мы создали новый столбец df['B'], который назвали «B».
- Мы присвоили значения вновь созданному столбцу со списком чисел.
Добавление нового столбца во фрейм данных Pandas: применение функций
Возможности стандартного метода добавления нового столбца в существующий фрейм данных дают нам возможность создать новый столбец и добавить его в существующий фрейм данных одной строкой кода.
Например, предположим, что мы хотим создать два новых столбца как комбинацию существующего столбца. Мы можем сделать это, применяя функции к существующим столбцам следующим образом:
import pandas as pd # Create a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 4]>) # Create a column doubling the values of column A df['B'] = df['A'] * 2 # Apply lambda function to column A to create column C df['C'] = df['A'].apply(lambda x: x ** 2) # Print data frame print(df) >>> A B C 0 1 2 1 1 2 4 4 2 3 6 9 3 4 8 16'A':>
Итак, вот что мы сделали:
- Мы создали столбец Pandas («A») в качестве фрейма данных.
- Мы создали столбец «B», удвоив значения столбца «A».
- Мы создали столбец «C», применив лямбда-функцию к столбцу «A». В частности, в данном случае мы возводим в квадрат значения столбца «А».
Все эти столбцы хранятся вместе в уникальном фрейме данных.
Добавление нового столбца во фрейм данных Pandas: использование Pandas Series или отдельных столбцов Pandas
Конечно, мы можем добавлять столбцы во фрейм данных Pandas, даже если столбцы представляют собой Series или фрейм данных.
Вот как мы можем это сделать:
import pandas as pd # Create a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 4]>) # Create a new column using pd.Series() values = pd.Series([5, 10, 15, 20]) # Create series df['B'] = values # Add series to data frame as a column # Print data frame print(df) >>> A B 0 1 5 1 2 10 2 3 15 3 4 20'A':>
Итак, в приведённом выше случае мы создали Pandas Series, затем добавили её в существующий фрейм данных, дав ей имя.
В случае столбца Pandas, созданного как фрейм данных, мы имеем следующее:
import pandas as pd # Create a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]>) # Create a Pandas column as a data frame df['C'] = pd.DataFrame() # Print data frame print(df) >>> A B C 0 1 5 9 1 2 6 10 2 3 7 11 3 4 8 12'A':>
Как переименовать столбец в Pandas
Переименование столбца Pandas (или нескольких) — ещё одна типичная ежедневная задача, которую нам нужно выполнять, но способ выполнения которой мы часто не можем вспомнить.
Для её реализации существуют различные методы. Давайте посмотрим их все!
Как переименовать столбец Pandas: метод rename()
Мы можем переименовать столбец Pandas с помощью метода rename():
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3], 'B': [4, 5, 6]>) # Renaming a single column df = df.rename(columns=<'A': 'NewA'>) # Print data frame print(df) >>> NewA B 0 1 4 1 2 5 2 3 6'A':>
Итак, мы как будто пользуемся словарём. Внутри метода rename() нам нужно передать аргумент columns и указать фактическое имя и новое имя внутри фигурных скобок, разделив их двоеточием. Так же, как мы делаем в словарях.
Конечно, мы можем использовать этот метод для переименования нескольких столбцов одновременно следующим образом:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3], 'B': [4, 5, 6]>) # Rename multiple columns df = df.rename(columns=<'A': 'NewA', 'B': 'NewB'>) # Print data frame print(df) >>> NewA NewB 0 1 4 1 2 5 2 3 6'A':>
Как переименовать столбец Pandas: атрибут columns
Чтобы переименовать один столбец в Pandas (или несколько), мы можем использовать атрибут columns следующим образом:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3], 'B': [4, 5, 6]>) # Renaming all columns df.columns = ['NewA', 'NewB'] # Print data frame print(df) >>> NewA NewB 0 1 4 1 2 5 2 3 6'A':>
В этом случае атрибут columns даёт нам возможность использовать список строк для переименования столбцов.
Как переименовать столбец Pandas: метод set_axis()
Чтобы переименовать один (или несколько) столбцов в Pandas, мы можем использовать метод set_axis():
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3], 'B': [4, 5, 6]>) # Renaming all columns df.set_axis(['NewA', 'NewB'], axis=1, inplace=True) # Print data frame print(df) >>> NewA NewB 0 1 4 1 2 5 2 3 6'A':>
Итак, даже в этом случае мы используем список строк для переименования столбцов, но здесь нам также нужно передать параметры axis=1 и inplace=True, поскольку метод set_axis() устанавливает оси с нуля. Это позволяет этому методу переименовывать столбцы.
Как переименовать столбец Pandas: использование лямбда-функций
Когда нам приходится иметь дело со строками, как в случае имён столбцов Pandas, мы можем использовать лямбда-функции для изменения символов текста.
Например, нам может понадобиться переименовать столбцы, просто переведя буквы в нижний регистр. Мы можем сделать это так:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'COLUMN_1': [1, 2, 3], 'COLUMN_2': [4, 5, 6]>) # Renaming columns using a lambda function df = df.rename(columns=lambda x: x.lower()) # Lowercase column names # Print data frame print(df) >>> column_1 column_2 0 1 4 1 2 5 2 3 6'COLUMN_1':>
Как удалить столбец в Pandas
Удаление столбца Pandas (или нескольких) — ещё одна задача, которую нам нужно выполнять очень часто. Например потому, что значения какого-то из столбцов могут оказаться несущественны или иметь значения NULL.
Для выполнения этой задачи у нас есть два метода. Давайте посмотрим на них!
Как удалить столбец в Pandas: метод drop()
Типичный способ удалить столбец в Pandas— использовать метод drop().
Здесь единственное, что нужно иметь в виду, так это решить, хотим ли мы удалить некоторые столбцы и создать новый фрейм данных, или мы хотим удалить их и заменить текущий фрейм данных.
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]>) # Drop one column and substitute the current data frame df = df.drop('A', axis=1) # Print updated data frame print(df) >>> B C 0 4 7 1 5 8 2 6 9'A':>
Итак, мы удалили столбец «А», используя метод drop(), указывающий имя столбца, который мы хотели удалить, и ось ( axis=1 в Pandas указывает вертикальное направление).
В данном случае мы решили заменить фрейм данных df. Итак, в конце процесса фрейм данных df больше не имеет столбца «А».
Если же мы хотим создать другой фрейм данных, допустим, мы вызываем id df_2, мы должны сделать это так:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': [10, 11, 12]>) # Drop one column and substitute the current data frame df_2 = df.drop(['A', 'D'], axis=1) # Print new data frame print(df_2) >>> B C 0 4 7 1 5 8 2 6 9'A':>
Итак, в этом случае мы удалили два столбца и создали новый фрейм данных со столбцами «B» и «C».
Это может быть полезно, если мы думаем, что нам может понадобиться исходный фрейм данных df в будущем для дальнейших анализов.
Как удалить столбец в Pandas: используйте индекс столбца
В Pandas столбцы можно выделить с помощью индексов. Это означает, что мы можем удалить их, используя индексы:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': [10, 11, 12]>) # Drop one column and append to a new data frame df_2 = df.drop(df.columns[[0, 1]], axis=1) # Print new data frame print(df_2) >>> C D 0 7 10 1 8 11 2 9 12'A':>
Итак, в этом случае мы создали новый фрейм данных только со столбцами «C» и «D» и удалили столбцы «A» и «B», используя их индексы.
Помня, что в Python мы начинаем индексацию с 0 (первый столбец имеет индекс 0 и является столбцом «A»), мы должны сказать, что этот метод может быть не оптимальным, если у нас есть десятки столбцов по простой причине: мы должны найти тот (или те), которые мы хотим отбросить, путём их подсчёта, что может привести к ошибкам.
Как найти уникальные значения в столбце Pandas
Поиск уникальных значений в столбце Pandas — это ещё одна задача, которую нам, возможно, придется выполнять ежедневно, потому что повторяющиеся значения должны обрабатываться особым образом.
В этом случае у нас есть несколько способов реализовать это. Давайте посмотрим на них.
Как найти уникальные значения в столбце Pandas: используйте метод value_counts() для поиска дубликатов
Если мы хотим увидеть, есть ли в столбце Pandas повторяющиеся значения, и мы также хотим узнать, сколько их, мы можем использовать метод value_counts():
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]>) # Find unique values in a Pandas column unique_values = df['A'].value_counts() # Print unique values print(unique_values) >>> 1 2 3 2 2 1 Name: A, dtype: int64'A':>
Итак, результат здесь говорит о том, что:
- Имя столбца — «A», а все типы — «int64».
- У нас есть две единицы.
- У нас есть две тройки.
- У нас одна двойка.
Данный метод показывает нам значения и сообщает, сколько из них присутствует в интересующем нас столбце.
Как найти уникальные значения в столбце Pandas: используйте метод drop_duplicates() для удаления дубликатов
Если мы хотим удалить повторяющиеся значения в столбце Pandas (потому что мы знаем, что в нём есть дубликаты), мы можем использовать метод drop_duplicates():
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]>) # Drop the duplicate values in a Pandas column unique_values = df['A'].drop_duplicates() # Print unique values print(unique_values) >>> 0 1 1 2 2 3'A':>
Итак, мы удалили дубликаты из столбца «A», создав новый столбец Pandas с именем unique_values.
Как найти уникальные значения в столбце Pandas: изучение фрейма данных
В этот момент вы можете спросить: « Хорошо, если у меня есть большой фрейм данных с десятками столбцов, как я могу знать, что некоторые столбцы имеют дубликаты?»
Хороший вопрос! Что мы можем сделать, так это сначала изучить весь фрейм данных.
Например, мы можем захотеть увидеть, есть ли дубликаты каких-либо столбцов. Мы можем сделать это так:
import pandas as pd # Creating a DataFrame with duplicates df = pd.DataFrame(<'A': [1, 2, 2, 3, 4, 4], 'B': [5, 6, 6, 7, 8, 8]>) # Check if there are duplicates in the DataFrame has_duplicates = df.duplicated().any() # Print the result print(has_duplicates) >>> True'A':>
Итак, этот код возвращает «True», если есть столбцы с дубликатами, и «False», если их нет.
А как насчет того, чтобы узнать имена столбцов, которые на самом деле имеют дубликаты? Мы можем сделать это так:
import pandas as pd # Creating a DataFrame with duplicates df = pd.DataFrame(<'A': [1, 2, 2, 3, 4, 4], 'B': [5, 6, 6, 7, 8, 8]>) # Find duplicate rows duplicate_rows = df.duplicated() # Print the duplicate rows print(df[duplicate_rows]) >>> A B 2 2 6 5 4 8'A':>
Приведённый выше код показывает:
- Столбцы с дубликатами.
- Значения дубликатов.
Теперь мы можем продолжить расследование с помощью метода value_counts() или удалить их с помощью метода drop_duplicates().
Как преобразовать столбец Pandas в список
Преобразование столбца Pandas в список — полезная функция, которая может дать нам возможность «изолировать» все значения из столбца Pandas, чтобы поместить их в список. Затем мы можем делать всё, что нам может понадобиться со списком, которым легко управлять.
У нас есть две возможности сделать это преобразование.
Как преобразовать столбец Pandas в список: метод list()
Метод list() — это встроенная в Python функция, которая преобразует итерируемый объект в список. Мы можем сделать это так:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]>) # Transform Pandas column into a list column_list = list(df['B']) # Print list print(column_list) >>> [4, 5, 6, 7, 8]'A':>
Итак, мы легко извлекли наши значения и поместили их в список.
Как преобразовать столбец Pandas в список: метод to_list()
Для достижения того же результата мы можем использовать метод to_list() от Pandas. Но будьте осторожны: он доступен в Pandas версии 1.2.0 или выше .
Мы можем сделать это так:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]>) # Transform Pandas column into a list column_list = df['B'].to_list() # Print list print(column_list) >>> [4, 5, 6, 7, 8]'A':>
И, конечно же, мы получили тот же результат, что и раньше.
Как отсортировать фрейм данных Pandas по столбцам
Есть много ситуаций, в которых нам нужно отсортировать наши столбцы. Под сортировкой мы подразумеваем упорядочивание, поэтому мы можем упорядочить данные по возрастанию или по убыванию.
Мы можем достичь этой цели следующими методами:
Как отсортировать фрейм данных Pandas по столбцам: метод sort_values()
Чтобы отсортировать фрейм данных Pandas по столбцам, мы можем использовать метод sort_values():
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [10, 2, 7, 1, 15], 'B': [4, 2, 6, 28, 8,], 'C': [7, 1, 9, 10, 19]>) # Sort df for A in ascending order df.sort_values('A', ascending=True, inplace=True) # Print sorted data frame print(df) >>> A B C 3 1 28 10 1 2 2 1 2 7 6 9 0 10 4 7 4 15 8 19'A':>
Итак, как мы видим, фрейм данных отсортирован по столбцу «А» в порядке возрастания. На самом деле, если мы проверим:
- Во фрейме исходных данных в столбце «А» цифра 1 стоит на 4-й позиции. В столбце «В» число 28 стоит на четвертой позиции.
- В отсортированном фрейме данных в столбце «А» число 1 стоит на первой позиции. В столбце «В» число 28 стоит на первой позиции.
Итак, мы сортируем фрейм данных, но не теряем связи между значениями столбцов.
Очень полезной особенностью этого метода является то, что он может сортировать столбец, помещая NaNs как первые значения. Мы можем сделать это так:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [10, 0, 0, 1, 15], 'B': [4, 2, 6, 28, 8,], 'C': [7, 1, 15, 10, 19]>) # Sort NaNs in the beginning df.sort_values('A', ascending=True, inplace=True) # Print sorted data frame print(df) >>> A B C 1 0 2 1 2 0 6 15 3 1 28 10 0 10 4 7 4 15 8 19'A':>
Как отсортировать фрейм данных Pandas по столбцам: метод sort_index()
Мы также можем отсортировать фрейм данных по значению индекса следующим образом:
import pandas as pd # Creating a DataFrame df = pd.DataFrame(<'A': [10, 2, 7, 1, 15], 'B': [4, 2, 6, 28, 8,], 'C': [7, 1, 9, 10, 19]>) # Sort data frame for index df.sort_index(inplace=True) # Print sorted data frame print(df) >>> A B C 0 10 4 7 1 2 2 1 2 7 6 9 3 1 28 10 4 15 8 19'A':>
И, как мы видим, индексы упорядочены (по возрастанию).
Заключение
В этой статье мы рассмотрели 7 основных операций со столбцами Pandas, которые мы выполняем едва ли не каждый день.
Это руководство поможет вам сэкономить много времени, если вы его сохраните, потому что мы выполняли одни и те же задачи по-разному, так что вам больше не придётся искать их в Google.