Как создать DataFrame из словаря
Другой распространенный случай – хранить данные каждого столбца нужной таблицы в словаре, помеченном именем столбца.
Чтобы создать DataFrame из словаря, просто предоставьте словарь конструктору класса DataFrame следующим образом: DataFrame(dictionary). Этот вызов возвращает объект DataFrame с данными из словаря, ключи которого являются именами столбцов.
Предположим, у вас есть словарь, в котором хранятся три списка, индексированные ключами Name, Age и Department. Вы просто предоставляете этот словарь конструктору DataFrame следующим образом:
И это все! Вот так просто можно получить следующий результат:
Убедитесь, что все списки словарей имеют одинаковую длину.
Как выбрать строки из Pandas DataFrame по условию
Собираем тестовый набор данных для иллюстрации работы выборки по условию
Color | Shape | Price |
Green | Rectangle | 10 |
Green | Rectangle | 15 |
Green | Square | 5 |
Blue | Rectangle | 5 |
Blue | Square | 10 |
Red | Square | 15 |
Red | Square | 15 |
Red | Rectangle | 5 |
Пишем скрипт:
import pandas as pd Boxes = {'Color': , 'Shape': , 'Price': } df = pd.DataFrame(Boxes, columns= ) print (df)
Результат выполнения:
Color Shape Price 0 Green Rectangle 10 1 Green Rectangle 15 2 Green Square 5 3 Blue Rectangle 5 4 Blue Square 10 5 Red Square 15 6 Red Square 15 7 Red Rectangle 5
Синтаксис выборки строк из Pandas DataFrame по условию
Вы можете использовать следующую логику для выбора строк в Pandas DataFrame по условию:
df.loc
Например, если вы хотите получить строки с зеленым цветом , вам нужно применить:
df.loc
Где:
- Color — это название столбца
- Green — это условие (значение колонки)
А вот полный код Python для нашего примера:
import pandas as pd Boxes = {'Color': , 'Shape': , 'Price': } df = pd.DataFrame(Boxes, columns= ) print (df.loc)
Результат:
Color Shape Price 0 Green Rectangle 10 1 Green Rectangle 15 2 Green Square 5
Выберем строки, где цена равна или больше 10
Чтобы получить все строки, где цена равна или больше 10, Вам нужно применить следующее условие:
df.loc
Полный код Python:
import pandas as pd Boxes = {'Color': , 'Shape': , 'Price': } df = pd.DataFrame(Boxes, columns= ) print (df.loc)
Результат:
Color Shape Price 0 Green Rectangle 10 1 Green Rectangle 15 4 Blue Square 10 5 Red Square 15 6 Red Square 15
Выберем строки, в которых цвет зеленый, а форма — прямоугольник
Теперь цель состоит в том, чтобы выбрать строки на основе двух условий:
- Color зеленый; а также
- Shape = прямоугольник
Мы будем использовать символ & для применения нескольких условий. В нашем примере код будет выглядеть так:
df.loc
Полный код примера Python для выборки Pandas DataFrame:
import pandas as pd Boxes = {'Color': , 'Shape': , 'Price': } df = pd.DataFrame(Boxes, columns= ) print (df.loc)
Результат:
Color Shape Price 0 Green Rectangle 10 1 Green Rectangle 15
Выберем строки, где цвет зеленый ИЛИ форма прямоугольная
Для достижения этой цели будем использовать символ | следующим образом:
df.loc
Полный код Python 3:
import pandas as pd Boxes = {'Color': , 'Shape': , 'Price': } df = pd.DataFrame(Boxes, columns= ) print (df.loc)
Результат:
Color Shape Price 0 Green Rectangle 10 1 Green Rectangle 15 2 Green Square 5 3 Blue Rectangle 5 7 Red Rectangle 5
Выберем строки, где цена не равна 15
Мы будем использовать комбинацию символов !=, чтобы выбрать строки, цена которых не равна 15:
df.loc
Полный код Pandas DF на питоне:
import pandas as pd Boxes = {'Color': , 'Shape': , 'Price': } df = pd.DataFrame(Boxes, columns= ) print (df.loc)
Результат работы скрипта Python:
Color Shape Price 0 Green Rectangle 10 2 Green Square 5 3 Blue Rectangle 5 4 Blue Square 10 7 Red Rectangle 5
Пример 2
Если вы не укажете параметр ignoreIndex = False, вы получите TypeError.
В следующем примере мы попытаемся добавить строку в DataFrame с параметром ignoreIndex = False.
import pandas as pd data = {'name': , 'physics': , 'chemistry': } #create dataframe df_marks = pd.DataFrame(data) print('Original DataFrame\n------------------') print(df_marks) new_row = {'name':'Geo', 'physics':87, 'chemistry':92} #append row to the dataframe df_marks = df_marks.append(new_row, ignore_index=False) print('\n\nNew row added to DataFrame\n--------------------------') print(df_marks)
Вывод:
Original DataFrame ------------------ name physics chemistry 0 Amol 77 73 1 Lini 78 85 Traceback (most recent call last): File "example1.py", line 14, in <module> df_marks = df_marks.append(new_row, ignore_index=False) File "C:\Users\PythonExamples\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py", line 6658, in append raise TypeError('Can only append a Series if ignore_index=True' TypeError: Can only append a Series if ignore_index=True or if the Series has a name
Как говорится в сообщении об ошибке, нам нужно либо предоставить параметр ignore_index = True, либо добавить строку, то есть Series, с именем.
Мы уже видели в примере 1, как добавить строку в DataFrame с ignore_index = True. Теперь посмотрим, как добавить строку с ignore_index = False.
import pandas as pd data = {'name': , 'physics': , 'chemistry': } #create dataframe df_marks = pd.DataFrame(data) print('Original DataFrame\n------------------') print(df_marks) new_row = pd.Series(data={'name':'Geo', 'physics':87, 'chemistry':92}, name='x') #append row to the dataframe df_marks = df_marks.append(new_row, ignore_index=False) print('\n\nNew row added to DataFrame\n--------------------------') print(df_marks)
Мы назвали серию данными. Поэтому ignore_index = False не возвращает TypeError, и строка добавляется к DataFrame.
Вывод:
Original DataFrame ------------------ name physics chemistry 0 Amol 77 73 1 Lini 78 85 New row added to DataFrame -------------------------- name physics chemistry 0 Amol 77 73 1 Lini 78 85 x Geo 87 92
В этом руководстве по Pandas мы использовали функцию append(), чтобы добавить строку в Pandas DataFrame.
Функции могут использоваться одна за другой
Важно понимать, что логика pandas очень линейна (как в SQL, например). Поэтому если вы применяете функцию, то можете применить другую к ней же
В таком случае входящие данные последней функции будут выводом предыдущей.
Например, объединим эти два метода перебора:
Первая строчка выбирает первые 5 строк из набора данных. Потом она выбирает колонки «country» и «user_id».
Можно ли получить тот же результат с иной цепочкой функций? Конечно:
В этом случае сначала выбираются колонки, а потом берутся первые 5 строк. Результат такой же — порядок функций (и их исполнение) отличается.
А что будет, если заменить значение «article_read» на оригинальную функцию read_csv():
Так тоже можно, но это некрасиво и неэффективно
Важно понять, что работа с pandas — это применение функций и методов один за одним, и ничего больше
Пример 1
В этом примере мы создадим DataFrame и добавим новую строку. Она инициализируется как словарь Python, а функция append() используется для добавления строки.
Когда вы добавляете словарь Python в append(), убедитесь, что вы передаете ignore_index = True.
Метод append() возвращает DataFrame с вновь добавленной строкой.
import pandas as pd data = {'name': , 'physics': , 'chemistry': , 'algebra': } #create dataframe df_marks = pd.DataFrame(data) print('Original DataFrame\n------------------') print(df_marks) new_row = {'name':'Geo', 'physics':87, 'chemistry':92, 'algebra':97} #append row to the dataframe df_marks = df_marks.append(new_row, ignore_index=True) print('\n\nNew row added to DataFrame\n--------------------------') print(df_marks)
Запустите указанную выше программу Python, и вы увидите исходный DataFrame, к которому добавлена новая строка.
Original DataFrame ------------------ name physics chemistry algebra 0 Somu 68 84 78 1 Kiku 74 56 88 2 Amol 77 73 82 3 Lini 78 69 87 New row added to DataFrame -------------------------- name physics chemistry algebra 0 Somu 68 84 78 1 Kiku 74 56 88 2 Amol 77 73 82 3 Lini 78 69 87 4 Geo 87 92 97
4 ответа
Лучший ответ
Предположим, ваши данные выглядят так:
Тогда его можно заменить на
Другими словами, не формируйте новый DataFrame для каждой строки. Вместо этого соберите все данные в список диктовок, а затем в конце вызовите вне цикла.
Каждый вызов требует выделения места для нового DataFrame с одной дополнительной строкой, копирования всех данных из исходного DataFrame в новый DataFrame, а затем копирования данных в новую строку. Все это распределение и копирование делают вызов в цикле очень неэффективным. Затраты времени на копирование увеличиваются в квадрате с увеличением количества строк. Мало того, что код call-DataFrame-Once легче написать, его производительность будет намного лучше — затраты времени на копирование растут линейно с количеством строк.
66
unutbu
7 Янв 2019 в 14:59
Я создал фрейм данных в цикле for с помощью временного пустого фрейма данных. Поскольку для каждой итерации цикла for будет создан новый фрейм данных, таким образом, будет перезаписано содержимое предыдущей итерации.
Следовательно, мне нужно переместить содержимое фрейма данных в пустой фрейм данных, который уже был создан. Это так просто. Нам просто нужно использовать функцию .append, как показано ниже:
Вне цикла for вы можете скопировать содержимое временного фрейма данных во фрейм основных данных, а затем удалить временный фрейм данных, если он вам не нужен.
4
JKC
25 Сен 2017 в 04:59
Есть две причины, по которым вы можете добавлять строки в цикле: 1. добавить к существующему df и 2. создать новый df.
Чтобы создать новый df, я думаю, что это хорошо документировано, что вы должны либо создать свои данные в виде списка, а затем создать фрейм данных:
ИЛИ, создать фрейм данных с индексом, а затем добавить к нему
Если вы хотите добавить к существующему фрейму данных, вы можете использовать любой из указанных выше методов, а затем добавить df вместе (с индексом или без него):
Или вы также можете создать список словарных статей и добавить их, как в ответе выше.
Использование dict (zip (cols, vals)))
53
kztd
15 Мар 2017 в 22:41
Возможно, более компактный и эффективный способ:
Вывод будет:
6
Ayanava Sarkar
18 Мар 2019 в 12:53
Как создать DataFrame из списка словарей
Чтобы создать DataFrame из списка словарей, просто предоставьте список конструктору класса DataFrame следующим образом: DataFrame(list). Этот вызов возвращает объект DataFrame, содержащий данные списка с ключами в виде имен столбцов.
В данном случае пример выглядит следующим образом:
Результатом приведенного выше кода будет:
Основная проблема этого решения заключается в том, что вы должны убедиться, что ключи в каждом словаре корректны и согласованы друг с другом. В целевом DataFrame будет создано столько столбцов, сколько различных ключей в словарях. Если, например, ключ, связанный с именем, в одном словаре – Name, в другом – name, а в третьем – NAME, то в итоге мы получим три разных колонки (с учетом регистра) для данных об имени, что нам не нужно. Кроме того, у нас будет много значений None, потому что если в других словарях нет значений для определенного ключа, то по умолчанию у нас будет именно None.
Как создать DataFrame из файла JSON
Другой вариант – хранить данные в файле JSON, что очень популярно в настоящее время.
Для создания DataFrame из файла JSON можно использовать функцию pandas read_json, задав ей имя файла следующим образом pandas.read_jason(‘data.json’). Эта функция создает новый DataFrame с данными, содержащимися в предоставленном файле.
Создадим DataFrame с теми же данными, что и в предыдущих примерах, только в этом случае исходный файл будет в формате JSON:
Теперь вам остается только использовать функцию read_json, которая будет считывать данные из файла и создавать DataFrame:
И чтобы не повторяться, результат будет таким же, как и в предыдущих случаях.
Здесь про это:
Рассмотрим несколько примеров, чтобы понять, чем отличается .iloc от .loc.
Выберем две строки и два столбца:
import pandas as pd import numpy as np df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';') print(df.iloc, ])
Результат:
Дата Менеджер 2 01.01.2016 Сидоров 3 01.01.2016 Сидоров
Осуществим выборку строк и столбцов с помощью среза:
import pandas as pd import numpy as np df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';') print(df.iloc)
Результат:
Дата Подразделение Контрагент 2 01.01.2016 Отдел продвижения Абакус ООО 3 01.01.2016 Отдел продвижения Абакус ООО 4 01.01.2016 Отдел продаж Билли Боб ООО 5 01.01.2016 Отдел продаж Билли Боб ООО 6 01.01.2016 Отдел продаж Билли Боб ООО 7 01.01.2016 Отдел продаж Билли Боб ООО 8 01.01.2016 Отдел продвижения Билли Боб ООО
Выберем 1 значение из столбца и указанной колонки:
import pandas as pd import numpy as np df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';') print(df.loc)
Результат:
Палатки
Как создать DataFrame из объектов pickle, parquet или Feather, файлов ORC, HDF, запросов SPSS, SAS, Stata или Google BigQuery.
Существуют и другие менее распространенные или более специализированные объекты или файлы данных, из которых также может быть сгенерирован DataFrame.
Если вы прочитали часть этой статьи, вы уже поняли общий подход к созданию DataFrame. Поэтому я не буду приводить примеры всех этих форматов, потому что статья будет слишком длинной (а я думаю, что она и так слишком длинная), но я хочу дать вам список функций, используемых для чтения этих объектов и файлов, чтобы вы знали об их существовании.
Со всеми этими функциями, а также со всеми теми, о которых я уже рассказал, можно ознакомиться в официальной документации pandas.
Объект или файл | Функция |
Pickle | read_pickle |
PyTables, HDF5 | read_hdf |
Feather | read_feather |
Parquet | read_parquet |
ORC | read_orc |
SAS | read_sas |
SPSS | read_spss |
Google BigQuery | read_gbq |
Stata | read_stata |
Таблица 2: Функции для создания DataFrames из других форматов
Как создать DataFrame из файла CSV
Часто мы храним данные в CSV-файле (Comma Separated Values), который представляет собой не что иное, как текстовый файл в виде таблицы, где значения разделены запятыми (или другим символом). Кроме того, эти файлы обычно имеют первую строку, которая выступает в качестве заголовка с названиями столбцов.
Для создания DataFrame из значений файла CSV можно использовать функции pandas read_csv или read_table, указав им файл и символ разделителя. Эти функции создают новый DataFrame с данными, содержащимися в файле.
Это данные, из которых мы создадим DataFrame.
Один из вариантов – использовать функцию read_csv, которая представляет собой функцию, специально разработанную для чтения файлов CSV. Он имеет множество параметров, но для простых файлов нам нужно указать только имя файла и символ, который используется в этом файле в качестве разделителя. В данном случае таким символом является запятая.
Рассмотрим пример:
Результат на экране будет выглядеть следующим образом:
В этом простом случае вы можете использовать функцию read_table аналогичным образом, и результат будет таким же.
Если файл для чтения приходит без имен колонок, мы должны указать их через параметр names следующим образом: pd.read_csv(‘data.csv’, delimiter=’,’, names=). Если нам не нужны имена столбцов, мы можем задать параметр header=None.
Еще одна функция, похожая на те, которые я только что представил, это read_fwf, которая генерирует таблицу данных из текстового файла, где поля имеют фиксированную ширину, поэтому нет необходимости использовать символ-разделитель, но операция очень похожа.
Метод 1: использование astype()
DataFrame.astype() приводит этот DataFrame к указанному типу данных. Ниже приводится синтаксис метода.
astype(dtype, copy=True, errors='raise', **kwargs)
Нас интересует только первый аргумент dtype – это тип данных или dict имени столбца.
Итак, давайте использовать метод astype() с аргументом dtype, чтобы изменить тип данных одного или нескольких столбцов DataFrame.
Как изменить тип данных одного столбца?
Давайте сначала начнем с изменения типа данных только для одного столбца.
В следующей программе мы изменим тип данных столбца a на float.
import pandas as pd import numpy as np #initialize a dataframe df = pd.DataFrame( , , , ], columns=) print('Previous Datatypes\n', df.dtypes, sep='') #change datatype of column df = df.astype({'a': np.float}) #print results print('\nNew Datatypes\n', df.dtypes, sep='') print('\nDataFrame\n', df, sep='')
Вывод:
Previous Datatypes a int64 b int64 c int64 dtype: object New Datatypes a float64 b int64 c int64 dtype: object DataFrame a b c 0 21.0 72 67 1 23.0 78 62 2 32.0 74 54 3 52.0 54 76
Как изменить тип данных нескольких столбцов?
Теперь давайте изменим тип данных более чем для одного столбца. Все, что нам нужно сделать, это предоставить больше пар column_name: datatype key:value в аргументе метода astype().
В следующей программе мы изменим тип данных столбца a на float, а b на int8.
import pandas as pd import numpy as np #initialize a dataframe df = pd.DataFrame( , , , ], columns=) print('Previous Datatypes\n', df.dtypes, sep='') #change datatype of column df = df.astype({'a': np.float, 'b': np.int8}) #print results print('\nNew Datatypes\n', df.dtypes, sep='') print('\nDataFrame\n', df, sep='')
Вывод:
Previous Datatypes a int64 b int64 c int64 dtype: object New Datatypes a float64 b int8 c int64 dtype: object DataFrame a b c 0 21.0 72 67 1 23.0 78 62 2 32.0 74 54 3 52.0 54 76
Как изменить тип данных всех столбцов?
Если вы хотите изменить тип данных всех столбцов DataFrame, вы можете просто передать этот тип данных в качестве аргумента методу astype() без словаря.
В следующей программе мы изменим тип данных всех столбцов на float.
import pandas as pd import numpy as np #initialize a dataframe df = pd.DataFrame( , , , ], columns=) print('Previous Datatypes\n', df.dtypes, sep='') #change datatype of column df = df.astype(np.float) #print results print('\nNew Datatypes\n', df.dtypes, sep='') print('\nDataFrame\n', df, sep='')
Вывод:
Previous Datatypes a int64 b int64 c int64 dtype: object New Datatypes a float64 b float64 c float64 dtype: object DataFrame a b c 0 21.0 72.0 67.0 1 23.0 78.0 62.0 2 32.0 74.0 54.0 3 52.0 54.0 76.0
Как создать DataFrame из данных буфера обмена
Если у вас есть данные в формате таблицы, подобном предыдущему случаю, разделенные запятыми (или другим разделителем) в системном буфере обмена, pandas позволяет читать их прямо оттуда без необходимости создавать для этого файл. Это интересно, поскольку позволяет нам динамически и очень быстро создавать DataFrame из данных, полученных из различных источников, просто копируя данные в буфер обмена.
Для создания DataFrame из значений, разделенных запятыми, скопированных в системный буфер обмена, можно использовать функцию pandas read_clipboard, указав символ-разделитель. Эта функция создает новый DataFrame с данными, содержащимися в буфере обмена.
Попробуйте это сделать, выбрав данные из следующего примера и скопировав их:
Теперь просто используйте функцию read_clipboard, и у вас есть DataFrame – почти магия!
Результат будет таким же, как и выше.
Если символ-разделитель полей не является одним или несколькими пробелами, вы должны указать нужный символ или строку, передав параметр функции, например, read_clipboard(‘,’). Если вы вызываете функцию без параметров, в качестве разделителей будут использоваться пробелы.
DataFrame: таблица данных с маркированными строками и столбцами
Прежде чем мы рассмотрим, как загружать различные источники данных в DataFrame, нам необходимо четко определить формат данных, который он представляет.
DataFrame представляет собой не что иное, как типичную двумерную таблицу данных со строками и столбцами. Кроме того, каждая строка и столбец могут иметь собственное имя или метку.
Так, например, мы можем сохранить в DataFrame расписание занятий, где столбцы – это дни, строки – часы, а значения – это каждый урок или предмет. Или мы можем также хранить список вылетов рейсов, где столбцы представляют номер рейса, время вылета и пункт назначения.
Обратите внимание, что таблица может иметь один столбец или одну строку, поэтому если вы встретите данные в таком формате, они также могут быть загружены в DataFrame. Они даже могут иметь одну строку и один столбец, т.е
одно значение!
Чтобы было понятнее, я приведу пример таблицы для наглядности моих слов:
Имя | Возраст |
Иван | 37 |
Петр | 42 |
Алексей | 40 |
Таблица 1: Пример таблицы, которая может быть загружена в DataFrame
Мы будем использовать таблицу, подобную этой, в некоторых примерах данной статьи.
Как открывать файлы с данными в pandas
Информация может храниться в файлах .csv или таблицах SQL. Возможно, в файлах Excel. Или даже файлах .tsv. Или еще в каком-то другом формате. Но цель всегда одна и та же. Если необходимо анализировать данные с помощью pandas, нужна , совместимая с pandas.
Структуры данных Python
В pandas есть два вида структур данных: Series и DataFrame.
Series в pandas — это одномерная структура данных («одномерная ndarray»), которая хранит данные. Для каждого значения в ней есть уникальный индекс.
DataFrame — двухмерная структура, состоящая из колонок и строк. У колонок есть имена, а у строк — индексы.
Загрузка файла .csv в pandas DataFrame
Для загрузки файла с данными в pandas используется функция .
Начнем с простого образца под названием zoo. В этот раз для практики вам предстоит создать файл .csv самостоятельно. Вот сырые данные:
Вернемся во вкладку “Home” Jupyter для создания нового текстового файла…
затем скопируем данные выше, чтобы вставить информацию в этот текстовый файл…
…и назовем его zoo.csv!
Это ваш первый файл.
Вернемся в Jupyter Notebook (который называется «pandas_tutorial_1») и откроем в нем этот файл!
Для этого нужна функция
Введем следующее в новую строку:
Готово! Это файл , перенесенный в pandas. Это двухмерная таблица — DataFrame. Числа слева — это индексы. А названия колонок вверху взяты из первой строки файла zoo.csv.
На самом деле, вам вряд ли придется когда-нибудь создавать файл для себя, как это было сделано в примере. Вы будете использовать готовые файлы с данными. Поэтому нужно знать, как загружать их на сервер!
Вот небольшой : ДАННЫЕ
Если кликнуть на ссылку, файл с данными загрузится на компьютер. Но он ведь не нужен вам на ПК. Его нужно загрузить на сервер и потом в Jupyter Notebook. Для этого нужно всего два шага.
Шаг 1) Вернуться в Jupyter Notebook и ввести эту команду:
Это загрузит файл на сервер. Проверьте:
Если кликнуть на него…
…можно получить всю информацию из файла.
Шаг 2) Вернуться в Jupyter Notebook и использовать ту же функцию (не забыв поменять имя файла и значение разделителя):
Данные загружены в pandas!
Что-то не так? В этот раз не было заголовка, поэтому его нужно настроить самостоятельно. Для этого необходимо добавить параметры имен в функцию!
Так лучше! Теперь файл .csv окончательно загружен в .
Булевы списки
Последним типом значения, которое вы можете передать в качестве индексатора, является логический массив или списока такжезначения. У этого метода есть реальная сила, и его можно использовать позже, когда мы начнем использоватьвпоставилзначения. Строки и столбцы, которые соответствуютзначения в индексаторе будут отфильтрованы. Массив не обязательно должен быть того же размера, что и соответствующий индекс, нобудет обрабатывать пропущенные значения, как если бы они были:
df.loc, ]
Вы также можете использоватьБулевы маскигенерировать логические массивы, которые вы передаете, Если мы хотим видеть только покемонов типа «Fire», мы сначала сгенерируем логическую маску — который возвращает сериюзначения для каждой строки в кадре данных. Затем мы передаем эту маску в качестве индексатора строки в:
df.loc == 'Fire']
Первые несколько строк булево-отфильтрованного фрейма данных.
Все возможности здесь, такие как получение покемонов с более чем 175 атаками:
df.loc > 175]
Или те, у кого меньше 100 очков жизни и более 650 общих характеристик:
df.loc < 100) & (df > 650)]
Или с буквой «X» в названии или с типом «PsychicFairy»:
df.loc.str.contains('X')) | (df.str.contains('PsychicFairy'))]
Отбор данных из dataframe в pandas
Это первая часть руководства, поэтому начнем с самых простых методов отбора данных, а уже в следующих углубимся и разберем более сложные.
Вывод всего dataframe
Базовый метод — вывести все данные из dataframe на экран. Для этого не придется запускать функцию снова и снова. Просто сохраните денные в переменную при чтении!
После этого можно будет вызывать значение каждый раз для вывода DataFrame!
Вывод части dataframe
Иногда удобно вывести не целый dataframe, заполнив экран данными, а выбрать несколько строк. Например, первые 5 строк можно вывести, набрав:
Или последние 5 строк:
Или 5 случайных строк:
Вывод определенных колонок из dataframe
А это уже посложнее! Предположим, что вы хотите вывести только колонки «country» и «user_id».
Для этого нужно использовать команду в следующем формате:
Есть предположения, почему здесь понадобились двойные квадратные скобки? Это может показаться сложным, но, возможно, так удастся запомнить: внешние скобки сообщают pandas, что вы хотите выбрать колонки, а внутренние — список (помните? Списки в Python указываются в квадратных скобках) имен колонок.
Поменяв порядок имен колонов, изменится и результат вывода.
Это DataFrame выбранных колонок.
- article_read.user_id
- article_read
Фильтрация определенных значений в dataframe
Если прошлый шаг показался сложным, то этот будет еще сложнее!
Предположим, что вы хотите сохранить только тех пользователей, которые представлены в источнике «SEO». Для этого нужно отфильтровать по значению «SEO» в колонке «source»:
Важно понимать, как pandas работает с фильтрацией данных:
Шаг 1) В первую очередь он оценивает каждую строчку в квадратных скобках: является ли значением колонки ? Результат всегда будет булевым значением ( или ).
Шаг 2) Затем он выводит каждую строку со значением из таблицы .
Выглядит сложно? Возможно. Но именно так это и работает, поэтому просто выучите, потому что пользоваться этим придется часто!
value counts
Это команда для проверки распределения значений. Например, если вы хотите проверить возможные значения и частоту для каждого отдельного значения в столбце «c», вы можете применить
df.value_counts()
Есть несколько полезных приемов / функций:
A. normalize = True : если вы хотите проверить частоту вместо подсчетов.
B. dropna = False : если вы хотите включить пропущенные значения в статистику.
C. sort = False : показать статистику, отсортированную по значениям, а не по количеству.
D. df.value_counts().reset_index().: если вы хотите преобразовать таблицу статистики в датафрейм Pandas и управлять ими.
Итоговая таблица
Мы рассмотрели несколько способов создания DataFrame с помощью pandas и Python. Если вы прочитали всю статью, то увидели, что все способы очень похожи, хотя каждый из них имеет свои особенности. Идея здесь в том, что пандас хочет сделать нашу жизнь проще, как вы видите.
В качестве резюме я привожу здесь таблицу со всеми рассмотренными нами способами и функциями для создания DataFrame.
Источник данных | Пример |
Данные отсутствуют | |
Список списков,список словарей | df = pd.DataFrame(list) |
Словарь списков | df = pd.DataFrame(dictionary) |
Массив NumPy | df = pd.DataFrame(array) |
Формат CSV | |
Файл с полямиполя фиксированной ширины | df = pd.read_fwf(‘data.fwf’) |
Данные в буфере обмена | df = pd.read_clipboard() |
Веб-файлы или файлы HTML | |
Электронная таблица | df = pd.read_excel(‘data.xlsx’) |
JSON-файл | df = pd.read_json(‘data.json’) |
База данных SQL | |
Другие форматы | См. таблицу 2 |
Таблица 3: Сводка создания DataFrames из различных форматов исходных данных