Основы pandas №1 // чтение файлов, dataframe, отбор данных

Исследуем данные: методы и атрибуты

Кроме методов, у датафреймов есть неотъемлемые свойства, которые называются атрибутами. В отличие от методов, они вызываются без скобок в конце.

Как видим, можно посмотреть каждую колонку отдельно. И уже к этой колонке применить метод:

Вывод будет таким:

Метод .describe(), применённый к колонке salary таблицы trips_df, показал нам следующее.

count — количество строк: 1 000.

mean — средний доход составляет 111 935 рублей. Неплохо!

std — под этим сокращением скрыто так называемое стандартное (среднеквадратичное) отклонение, которое показывает величину разброса значений. В нашем случае оно довольно большое, почти 55 000 рублей. Это означает, что доходы у людей в таблице очень разные.

min — минимальное значение доходов из таблицы. Ноль значит, что есть как минимум один человек с нулевым доходом.

В математической статистике процентиль, или перцентиль (ударение на последний слог), — это, если по-простому, пара чисел. Первое из них — процентная доля тех значений рассматриваемой величины, которые не превышают второго числа. Например, фраза «двадцать пятый процентиль доходов туристов составляет 68 000 рублей в месяц» означает, что у 25% наших туристов доход не превышает этой суммы. А у остальных, что очевидно, доход больше.

25% — вот он, тот самый двадцать пятый процентиль. Часто его ещё называют «нижний квартиль».

50% — пятидесятый процентиль, или медиана. В примере она равна 99000, и это значит, что одна половина людей из таблицы получает меньше этой суммы, а другая — больше.

75% — семьдесят пятый процентиль, который также часто называют «верхний квартиль». Означает, что у 75% людей доход меньше 161 000 рублей, а у оставшихся 25% — больше.

max — здесь всё понятно. В нашей таблице есть как минимум один человек с доходом 250 000 рублей в месяц — наверняка это какой-нибудь дата-сайентист: -).

Name: salary, dtype: float64 — служебная информация: название колонки и тип данных в ней.

Структура данных DataFrame

Если Series представляет собой одномерную структуру, которую для себя можно представить как таблицу с одной строкой, то DataFrame – это уже двумерная структура – полноценная таблица с множеством строк и столбцов.

Перед работой с DataFrame не забудьте импортировать библиотеку pandas.

Конструктор класса DataFrame выглядит так:

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

data – массив ndarray, словарь (dict) или другой DataFrame;

index – список меток для записей (имена строк таблицы);

columns – список меток для полей (имена столбцов таблицы);

dtype – объект numpy.dtype, определяющий тип данных;

copy – создает копию массива данных, если параметр равен True в ином случае ничего не делает.

Структуру DataFrame можно создать на базе:

  • словаря (dict) в качестве элементов которого должны выступать: одномерные ndarray, списки, другие словари, структуры Series;
  • двумерные ndarray;
  • структуры Series;
  • структурированные ndarray;
  • другие DataFrame.

Рассмотрим на практике различные подходы к созданию DataFrame’ов.

Создание DataFrame из словаря

В данном случае будет использоваться одномерный словарь, элементами которого будут списки, структуры Series и т.д.

Начнем с Series.

In : d = {"price"pd.Series(, index=),
   ... "count": pd.Series(, index=)}
In : df1 = pd.DataFrame(d)

In : print(df1)
   count price
v1    10     1
v2    12     2
v3     7     3

In : print(df1.index)
Index(, dtype='object')

In : print(df1.columns)
Index(, dtype='object')

Теперь построим аналогичный словарь, но на элементах ndarray.

In : d2 = {"price"np.array(),
   ... "count": np.array()}
In : df2 = pd.DataFrame(d2, index=)
In : print(df2)
   count price
v1    10     1
v2    12     2
v3     7     3

In : print(df2.index)
Index(, dtype='object')

In : print(df2.columns)
Index(, dtype='object')

Как видно – результат аналогичен предыдущему. Вместо ndarray можно использовать обычный список из Python.

Создание DataFrame из списка словарей

До это мы создавали DataFrame из словаря, элементами которого были структуры Series, списки и массивы, сейчас мы создадим DataFrame из списка, элементами которого являются словари.

In : d3 = 
In : df3 = pd.DataFrame(d3)
In : print(df3)
  count price
     8     3
1    11     4

In : print(df3.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries,  to 1
Data columns (total 2 columns):
count 2 non-null int64
price 2 non-null int64
dtypes: int64(2)
memory usage: 112.0 bytes
None

Создание DataFrame из двумерного массива

Создать DataFrame можно также и из двумерного массива, в нашем примере это будет ndarray из библиотеки numpy.

In : nda1 = np.array(, ])
In : df4 = pd.DataFrame(nda1)
In : print(df4)
     1  2
  1  2  3
1 10 20 30

Работа с элементами DataFrame

Работа с элементами DataFrame – доступ к элементам данной структуры – тема достаточно обширная и она будет освещена в одном из ближайших уроков. Сейчас мы рассмотрим наиболее часто используемые способы работы с элементами DataFrame.

Основные подходы представлены в таблице ниже.

Операция Синтаксис Возвращаемый результат
Выбор столбца df Series
Выбор строки по метке df.loc Series
Выбор строки по индексу df.iloc Series
Слайс по строкам df DataFrame
Выбор строк, отвечающих условию df DataFrame

Теперь посмотрим, как использовать данные операций на практике.

Для начала создадим DataFrame.

In : d = {"price"np.array(),
   ... "count": np.array()}
In : df = pd.DataFrame(d, index=)
In : print(df)
  count price
a    10     1
b    20     2
c    30     3

Операция: выбор столбца.

In : df
Out:
a 10
b 20
c 30
Name: count, dtype: int32

Операция: выбор строки по метке.

In : df.loc
Out:
count 10
price 1
Name: a, dtype: int32

Операция: выбор строки по индексу.

In : df.iloc
Out:
count 20
price 2
Name: b, dtype: int32

Операция: slice по строкам.

In : df
Out:
  count price
a    10     1
b    20     2

Операция: выбор строк, отвечающих условию.

In : df >= 20]
Out:
  count price
b    20     2
c    30     3 

Как создать Pandas DataFrame?

В реальном миреPanda DataFrameбудет создан путем загрузки наборов данных из постоянного хранилища, включая, помимо прочего, базы данных excel, csv и MySQL.

Как показано на листе Excel выше, если мы рассматриваем имена столбцов как«Ключи»и список предметов под этим столбцом как»Значения»мы можем легко использовать словарь Python для представления так же, как

my_dict = {      'name' : ,     'age' : ,     'designation': }

Мы можем создатьПанды DataFrameиз этого словаря как

import Pandas as pddf = pd.DataFrame(my_dict)

Результирующий DataFrame должен выглядеть аналогично тому, что мы видели на листе Excel выше, как

Результат -> df = pd.DataFrame (my_dict)

Как создать DataFrame из файла JSON

Другой вариант – хранить данные в файле JSON, что очень популярно в настоящее время.

Для создания DataFrame из файла JSON можно использовать функцию pandas read_json, задав ей имя файла следующим образом pandas.read_jason(‘data.json’). Эта функция создает новый DataFrame с данными, содержащимися в предоставленном файле.

Создадим DataFrame с теми же данными, что и в предыдущих примерах, только в этом случае исходный файл будет в формате JSON:

Теперь вам остается только использовать функцию read_json, которая будет считывать данные из файла и создавать DataFrame:

И чтобы не повторяться, результат будет таким же, как и в предыдущих случаях.

11 ответов

Лучший ответ

Если я правильно понимаю, вы хотите что-то вроде этого:

(Здесь я преобразую значения в числа вместо строк, содержащих числа. Вы можете преобразовать их в и , если вы действительно этого хотите, но я не уверен, почему вы этого хотите.)

Причина, по которой ваш код не работает, заключается в том, что использование в столбце (второй в вашем ) не означает «выбрать строки, в которых значение равно« женский »» , Это означает, что нужно выбрать строки, в которых index — это «female», которых в вашем DataFrame может не быть.

218

BrenBarn
26 Апр 2014 в 06:12

В качестве альтернативы есть встроенная функция pd.get_dummies для таких назначений:

Это дает вам фрейм данных с двумя столбцами, по одному на каждое значение, встречающееся в w , из которых вы отбрасываете первый (потому что вы можете вывести его из того, что осталось). Новый столбец автоматически будет назван в качестве строки, которую вы заменили.

Это особенно полезно, если у вас есть категориальные переменные с более чем двумя возможными значениями. Эта функция создает столько фиктивных переменных, сколько необходимо для различения всех случаев. Будьте осторожны, чтобы не назначить весь фрейм данных одному столбцу, а вместо этого, если w может быть ‘male’, ‘female’ или ‘нейтральным’, сделайте что-то вроде этого:

Затем у вас остаются две новые колонки, дающие вам фиктивную кодировку «женщина», и вы избавились от колонки со строками.

7

galliwuzz
1 Дек 2016 в 10:27

Вы можете редактировать подмножество данных, используя loc:

В этом случае:

104

Jimmy Petersson
16 Фев 2015 в 12:27

Это очень компактно:

Еще один хороший:

8

Azz
24 Июл 2018 в 10:55

В также есть функция ` X1`, который вы можете использовать для автоматического выполнения этой работы. Он преобразует метки в числа: . См. этот ответ для получения дополнительной информации.

1

Roald
18 Ноя 2017 в 14:54

Вы также можете использовать с , т.е.

{{Х0}} :

Фрейм данных :

Используя для замены значений из словаря:

Результат:

Примечание: со словарем следует использовать, если все возможные значения столбцов в кадре данных определены в словаре, иначе он будет пустым для тех, которые не определены в словаре.

10

student
13 Мар 2018 в 22:20

Использование с

Если ваш столбец содержит больше строк, чем только и , в этом случае произойдет сбой , поскольку он вернет для других значений.

Вот почему мы должны связать это с :

Пример, почему не удается :

Для метода правильного мы связываем с , поэтому заполняем значениями из исходного столбца:

Erfan
27 Янв 2020 в 19:43

Небольшое изменение:

32

deckard
30 Апр 2016 в 16:34

Я думаю, что в ответе должно быть указано, какой тип объекта вы получаете во всех методах, предложенных выше: это Series или DataFrame.

Когда вы получите столбец по или (где, предположим, 2 — это номер вашего столбца), вы получите DataFrame. Так что в этом случае вы можете использовать методы DataFrame, такие как .

Когда вы используете или , вы возвращаете Series, а Series не имеют метода , поэтому вам следует использовать такие методы, как , и скоро.

Alex-droid AD
15 Окт 2018 в 11:43

Это также должно работать:

19

Nick Crawford
19 Авг 2016 в 20:35

См. pandas.DataFrame.replace () документы. ,

31

jfs
26 Мар 2016 в 15:08

Метод 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

Функции могут использоваться одна за другой

Важно понимать, что логика pandas очень линейна (как в SQL, например). Поэтому если вы применяете функцию, то можете применить другую к ней же

В таком случае входящие данные последней функции будут выводом предыдущей.

Например, объединим эти два метода перебора:

Первая строчка выбирает первые 5 строк из набора данных. Потом она выбирает колонки «country» и «user_id».

Можно ли получить тот же результат с иной цепочкой функций? Конечно:

В этом случае сначала выбираются колонки, а потом берутся первые 5 строк. Результат такой же — порядок функций (и их исполнение) отличается.

А что будет, если заменить значение «article_read» на оригинальную функцию read_csv():

Так тоже можно, но это некрасиво и неэффективно

Важно понять, что работа с pandas — это применение функций и методов один за одним, и ничего больше

Pandas DataFrame Применить () Примеры

Давайте посмотрим на некоторые примеры использования функции Apply () на объекте DataFrame.

1. Применение функции к элементам DataFrame

import pandas as pd

df = pd.DataFrame({'A': , 'B': })


def square(x):
    return x * x


df1 = df.apply(square)

print(df)
print(df1)

Выход:

   A   B
0  1  10
1  2  20

   A    B
0  1  100
1  4  400

DataFrame, на котором применяется функция (), вызывается остается неизменным. Функция Apply () возвращает новый объект DataFrame после применения функции к его элементам.

2. Применить () с лямбдой

Если вы посмотрите на вышеприведенный пример, наша функция Square () очень проста. Мы можем легко преобразовать его в функцию лямбда. Мы можем создать функцию лямбда при вызове функции Apply ().

df1 = df.apply(lambda x: x * x)

Выход будет оставаться таким же, как последний пример.

3. Применить () вдоль оси

Мы можем применить функцию вдоль оси. Но в последнем примере не используется ось. Функция применяется ко всем элементам датафарама.

Использование оси становится понятно, когда мы вызываем совокупную функцию на строках или столбцах DataFrame. Допустим, мы хотим получить сумму элементов вдоль столбцов или индексов. Выход будет отличаться в зависимости от значения аргумента оси.

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': , 'B': })

df1 = df.apply(np.sum, axis=0)
print(df1)

df1 = df.apply(np.sum, axis=1)
print(df1)

Выход:

A     3
B    30
dtype: int64

0    11
1    22
dtype: int64

В первом примере рассчитывается сумма элементов вдоль столбца

Принимая во внимание, что во втором примере рассчитывается сумма элементов вдоль ряда

4. DataFrame Применить () с аргументами

Допустим, мы хотим применить функцию, которая принимает более одного параметра. В этом случае мы можем пройти дополнительные параметры, используя аргумент «args».

import pandas as pd


def sum(x, y, z):
    return x + y + z


df = pd.DataFrame({'A': , 'B': })

df1 = df.apply(sum, args=(1, 2))
print(df1)

Выход:

   A   B
0  4  13
1  5  23

5. DataFrame Применить () с позиционными аргументами и ключевыми словами

Давайте посмотрим на пример, где мы будем использовать параметры «args», так и «кваргс» для передачи позиционных и ключевых элементов аргументов к функции.

import pandas as pd


def sum(x, y, z, m):
    return (x + y + z) * m


df = pd.DataFrame({'A': , 'B': })

df1 = df.apply(sum, args=(1, 2), m=10)
print(df1)

Выход:

    A    B
0  40  130
1  50  230

Функция Python ISNA ()

На начальных этапах предварительной обработки данных и отсутствующего анализа стоимости, функция Python ISNA () приходит к нашему спасению, чтобы передать нам недостающие данные значения.

То есть с функцией isna () мы можем легко обнаружить наличие отсутствующего значения, которое является значением NULL или NA от всего набора данных. Это логическая функция, которая возвращается только в том случае, если набор данных состоит из пропущенных значений.

Таким образом, для быстрой и легкой проверки предварительной обработки, функция ISNA () может быть использована для того, чтобы помочь нам иметь представление о пропущенных значениях в наборе данных.

Синтаксис-

pandas.dataframe.isna()

Пример-

import pandas
data = pandas.read_csv("bike.csv")
data.isna()

Выход-

Как ясно видно ниже функция ISNA () проверяет наличие отсутствующего значения на каждом элементе и возвращает false в качестве результата. Это означает, что набор данных свободен от пропущенных значений.

Разоблачение проекта

Что такое PunkPanda? Очередной криптопузырь на платформе Binance Smart Chain. Чтобы токен лучше покупали в будущем, жулики решили создать под него мессенджер. Надёжен он он? Никто не проводил независимый аудит. Так что нет, не надёжен.

Пока что шарлатаны раздают PPM бесплатно. Монеты продать нельзя, они не торгуются на биржах. Может быть в будущем токены попадут в чей-то листинг и даже краткосрочно поднимутся в цене. Только после роста их ждёт стремительный обвал. Аферисты срубят на пике деньжат, а после всех кинут.

PunkPanda не первый такой проект, и не последний.

Почему я столь категорична? Во-первых, в мессенджере невозможно зарегистрироваться без реферала, как и на многих финансовых пирамидах. Во-вторых, стоимость монеты обеспечена только обещаниями жуликов. В-третьих, ничего революционного шарлатаны не создали. Эта схема развода существует давно и множество раз обкатана. Посмотрите на любую из тысяч криптомонет за последние пару лет, которые вспыхнули на старте и потом быстро потухли.

Что касается вознаграждения за пользование мессенджером, то сама по себе идея – так себе. Ведь в реальности зачем нам мессенджеры?  Чтобы отправлять и получать сообщения. Если мы будем получать за это деньги, значит мы должны будем дополнительно выполнять какую-то работу. Например, активно приглашать рефералов. Оно нам надо, с учётом того, что платят фантиками?

Пример 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

Как создать DataFrame из файла Excel

Другим распространенным случаем является наличие данных в файле Microsoft Excel или в совместимой электронной таблице, например, в таблицах открытого формата из пакета LibreOffice.

Чтобы создать DataFrame из электронной таблицы или файла Excel, вы можете использовать функцию pandas read_excel, указав ей имя файла. Эта функция открывает и считывает файл и создает DataFrame с его содержимым, готовый к использованию.

На изображении ниже показаны данные, содержащиеся в электронной таблице, в данном случае созданной с помощью Google Drive и сохраненной в формате xlsx с именем data.xlsx.

Электронная таблица для загрузки в pandas DataFrame

Для загрузки данных из файла и создания DataFrame мы будем использовать функцию read_excel. Эта функция выполняет чтение данных из исходного файла с помощью другой библиотеки. Так как в данном случае формат файла – Excel, используемая библиотека – openpyxl, которую необходимо установить с помощью команды pip install openpyxl. Если нам нужно прочитать файл в формате Open Document Format (например, в LibreOffice), то библиотека для установки – odf.

После установки необходимой библиотеки мы можем использовать функцию read_excel следующим простым способом:

Легко, не так ли? Результат на экране будет выглядеть следующим образом:

Может случиться так, что таблица, которую мы хотим прочитать, находится в определенной строке и столбце файла. В этом случае нам придется указать ему, какие строки игнорировать с помощью параметра skiprows и какие столбцы читать с помощью параметра usecols.

Также возможно, что таблица, которую нам нужно загрузить, находится не на первом листе документа. Мы можем использовать параметр sheet_name для указания листа, на котором он должен искать данные. Мы можем указать номер листа, учитывая, что первый из них – 0, или название листа.

Например, если таблица данных начинается со строки 3 и столбца B листа с названием Employees в файле data.xlsx, мы можем загрузить данные следующим образом: df = pd.read_excel(‘data.xlsx’, sheet_name=’Employees’, usecols=’B:D’, skiprows=2).

Извлечение значений по условиям в Pandas

Иногда нам нужно получить не все данные из DataFrame, а только некоторые, удовлетворяющие каким-то условиям.

Разберем практический пример. У нас есть база сотрудников с информацией об их именах, возрасте и зарплате. Создадим dataframe:

Давайте выведем только тех сотрудников, чей возраст превышает 30 лет:

Вывод:

Итак, все просто: мы указываем DataFrame, к которому применяем условие, а само условие записывается в квадратных скобках. Подробнее об операторах сравнения.

В качестве условий можно также использовать статистические методы.

Давайте попробуем вывести имена тех сотрудников, чья зарплата выше среднего:

Pandas DataFrame Groupby () синтаксис

Синтаксис функции Groupby ():

groupby(
        self,
        by=None,
        axis=0,
        level=None,
        as_index=True,
        sort=True,
        group_keys=True,
        squeeze=False,
        observed=False,
        **kwargs
    )
  • По Аргумент определяет путь к элементам группы. Как правило, имена столбцов используются для группы элементов DataFrame.
  • Ось Параметр определяет, нужно ли погружать строки или столбцы.
  • Уровень используется с Multiindex (иерархическими) для группы по определенному уровню или уровням.
  • AS_INDEX Указывает, чтобы вернуть агрегированный объект с помощью меток групп в качестве индекса.
  • Сортировать Параметр используется для сортировки групповых ключей. Мы можем пройти его как ложь для лучшей производительности с более крупными объектами DataFrame.
  • group_keys : При вызове Apply, добавьте групповые клавиши, чтобы индексировать, чтобы идентифицировать кусочки.
  • сжать : Уменьшить размерность типа возврата, если это возможно, в противном случае верните последовательный тип.
  • Наблюдается : Если true: только показать наблюдаемые значения для категориальных управляющих. Если false: показать все значения для категориальных управляющих.
  • ** kwargs : Принимает только ключевое слово «мутировать» и передается в группу.

Функция groupby () возвращает dataframegroupby или seriesgroupby в зависимости от объекта вызывающего.

Как добавить столбцы в DataFrame

Обратите внимание, что основным измерением DataFrame являются столбцы, поэтому доступ к столбцам всегда немного более прямой, чем к строкам. На самом деле, используя типичную скобочную нотацию, мы обращаемся к столбцам раньше, чем к строкам, что противоречит общепринятой практике

Один из способов добавления нового столбца в DataFrame – присвоить ему непосредственно значения, которые должен иметь столбец, как это делается в словаре и в скобочной нотации. Поскольку в данном случае мы не хотим вводить значения, мы просто указываем None.

В результате выполнения приведенного выше кода получается следующее, где видно, что в DataFrame, хотя он и пуст, появился новый столбец под названием Name. Кроме того, вы можете увидеть Index, но мы можем пока проигнорировать ее:

Другим способом добавления столбцов является использование функции assign в DataFrame. Эта функция позволяет нам добавлять колонки к уже созданным. Однако она не добавляет их в исходный DataFrame, а возвращает новый, содержащий новые плюс исходные столбцы:

Результатом выполнения приведенного выше кода будет:

Будьте осторожны! Если вы назначите уже существующие колонки, вы перезапишете их значения. В данном случае это не имеет большого значения, потому что у нас пока нет данных, но имейте в виду, что они уже могут быть.

Итак, мы знаем, как добавить столбцы, но… вы согласитесь со мной, что от DataFrame без данных тоже мало толку. Давайте посмотрим, как добавить данные.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

DataFrame и Series

Чтобы анализировать данные с помощью Pandas, нужно понять, как устроены структуры этих данных внутри библиотеки. В первую очередь разберем, что такое DataFrame и Series.

Pandas Series (серия) — это одномерный массив. Визуально он похож на пронумерованный список: слева в колонке находятся индексы элементов, а справа — сами элементы.

Индексом может быть числовой показатель (0, 1, 2…), буквенные значения (a, b, c…) или другие данные, выбранные программистом. Если особое значение не задано, то числовые индексы проставляются автоматически. Например, от 0 до 5 как в примере выше.

Такая нумерация называется RangeIndex, в ней всегда содержатся числа от 0 до определенного числа N, которое обозначает количество элементов в серии. Собственные значения индексов задаются в квадратных скобках через index, как в примере ниже:

Индексы помогают обращаться к элементам серии и менять их значения. Например, чтобы в нашей серии заменить значения некоторых элементов на 0, мы прописываем индексы нужных элементов и указываем, что они равны нулю:

Можно сделать выборку по нескольким индексам, чтобы ненужные элементы в серии не отображались:

>>> my_series2]

a 5

b 6

f 10

dtype: int64

Pandas DataFrame — это двумерный массив, похожий на таблицу/лист Excel (кстати, данные из Excel можно читать с помощью команды pandas.read_excel(‘file.xls’)). В нем можно проводить такие же манипуляции с данными: объединять в группы, сортировать по определенному признаку, производить вычисления. Как любая таблица, датафрейм состоит из столбцов и строк, причем столбцами будут уже известные объекты — Series.

Чтобы проверить, действительно ли серии — это части датафрейма, можно извлечь любую колонку из таблицы. Возьмем набор данных о нескольких странах СНГ, их площади и населении и выберем колонку country:

>>> df = pd.DataFrame({

… ‘country’: ,

… ‘population’: ,

… ‘square’:

… })

>>> df

country population square

0 Kazakhstan 17.04 2724902

1 Russia 143.50 17125191

2 Belarus 9.50 207600

3 Ukraine 45.50 603628

В итоге получится простая серия, в которой сохранятся те же индексы по строкам, что и в исходном датафрейме.

>>> df

0 Kazakhstan

1 Russia

2 Belarus

3 Ukraine

Name: country, dtype: object

>>> type(df)

<class ‘pandas.core.series.Series’>

Курс 

Аналитика данных с нуля

Получите востребованные навыки и освойте профессию аналитика данных за 6 месяцев. Дополнительная скидка 5% по промокоду BLOG.

Узнать больше

Кроме этого, у датафрейма есть индексы по столбцам, которые задаются вручную. Для простоты написания кода обозначим страны индексами из двух символов: Kazakhstan — KZ, Russia — RU и так далее:

>>> df = pd.DataFrame({

… ‘country’: ,

… ‘population’: ,

… ‘square’:

… }, index=)

>>> df

country population square

KZ Kazakhstan 17.04 2724902

RU Russia 143.50 17125191

BY Belarus 9.50 207600

UA Ukraine 45.50 603628

>>> df.index =

>>> df.index.name = ‘Country Code’

>>> df

country population square

Country Code

KZ Kazakhstan 17.04 2724902

RU Russia 143.50 17125191

BY Belarus 9.50 207600

UA Ukraine 45.50 603628

По индексам можно искать объекты и делать выборку, как в Series. Возьмем тот же датафрейм и сделаем выборку по индексам KZ, RU и колонке population методом .loc (в случае .loc мы используем квадратные скобки, а не круглые, как с другими методами), чтобы сравнить население двух стран:

>>> df.loc, ‘population’]

Country Code

KZ 17.04

RU 143.50

Name: population, dtype: float64

Также в DataFrame производят математические вычисления. Например, рассчитаем плотность населения каждой страны в нашем датафрейме. Данные в колонке population (численность населения) делим на square (площадь) и получаем новые данные в колонке density, которые показывают плотность населения:

>>> df = df / df * 1000000

>>> df

country population square density

Country Code

KZ Kazakhstan 17.04 2724902 6.253436

RU Russia 143.50 17125191 8.379469

BY Belarus 9.50 207600 45.761079

UA Ukraine 45.50 603628 75.377550

Курс 

Data Science с нуля

Закрепите навыки Data Science и получите перспективную профессию за 13 месяцев. Дополнительная скидка 5% по промокоду BLOG.

Узнать больше

Отбор данных из 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) Затем он выводит каждую строку со значением из таблицы .

Выглядит сложно? Возможно. Но именно так это и работает, поэтому просто выучите, потому что пользоваться этим придется часто!

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: