Моя шпаргалка по pandas

Pandarallel

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

Осталось только написать оптмизированную версию нашего обработчика, что тоже очень просто — достаточно заменить на :

Сравним скорость работы:

Итоги

  • В глаза сразу бросается довольно большой overhead в примерно 0.5 сек. При каждом применении под капотом сначала создается, а потом закрывается пул воркеров. В самописном варианте выше я создавал пул 1 раз, а потом его переиспользовал, поэтому накладные расходы были сильно ниже.
  • Если не учитывать описанные выше издержки, то ускорение такое же, как и в предыдущем варианте, примерно в 2-3 раза.

В целом, я бы предпочел этот вариант самописному, т.к при средних/больших объемах данных разницы в скорости почти нет, при этом мы получаем крайне простой API и progress bar.

Add column to dataframe in pandas using [] operator

Pandas: Add new column to Dataframe with Values in list

Suppose we want to add a new column ‘Marks’ with default values from a list. Let’s see how to do this,

# Add column with Name Marks
df_obj = 

df_obj

Output:

    Name  Age       City    Country  Marks
a   jack   34     Sydeny  Australia     10
b   Riti   30      Delhi      India     20
c  Vikas   31     Mumbai      India     45
d  Neelu   32  Bangalore      India     33
e   John   16   New York         US     22
f   Mike   17  las vegas         US     11

As dataframe df_obj didn’t had any column with name ‘Marks’ , so it added a new column in this dataframe.

But we need to keep these things in mind i.e.

  • If values provided in list are less than number of indexes then it will give ValueError.
  • If Column already exists then it will replace all its values.

Pandas: Add new column to DataFrame with same default value

Now add a new column ‘Total’ with same value 50 in each index i.e each item in this column will have same default value 50,

df_obj = 50

df_obj

Output

    Name  Age       City    Country  Marks  Total
a   jack   34     Sydeny  Australia     10     50
b   Riti   30      Delhi      India     20     50
c  Vikas   31     Mumbai      India     45     50
d  Neelu   32  Bangalore      India     33     50
e   John   16   New York         US     22     50
f   Mike   17  las vegas         US     11     50

It added a new column ‘Total‘ and set value 50 at each items in that column.

Pandas: Add column based on another column

Let’s add a new column ‘Percentage‘ where entry at each index will be calculated by the values in other columns at that index i.e.

df_obj = (df_obj / df_obj) * 100

df_obj

Output:

    Name  Age       City    Country  Marks  Total  Percentage
a   jack   34     Sydeny  Australia     10     50        20.0
b   Riti   30      Delhi      India     20     50        40.0
c  Vikas   31     Mumbai      India     45     50        90.0
d  Neelu   32  Bangalore      India     33     50        66.0
e   John   16   New York         US     22     50        44.0
f   Mike   17  las vegas         US     11     50        22.0

It added a new column ‘Percentage‘ , where each entry contains the percentage of that student, which was calculated based on Marks & Total column values for that index.

Conclusion

Hurray! You have come to the end of the tutorial. In this tutorial, you learned to concatenate and merge DataFrames based on several logics using the and functions of library. Towards the end, you also practiced the special function for merging Time-series DataFrames. Along the way, you also learned to play with indexes of the DataFrames. There are several other options you can explore for joining DataFrames in pandas, and I encourage you to look at its fantastic documentation. Happy exploring!

This tutorial used the following sources to help write it:

https://pandas.pydata.org/pandas-docs/stable/merging.html

If you would like to learn more about pandas, take DataCamp’s pandas Foundations course.

Соединение

Операция соединения (), которая соответствует из SQL, состоит из объединения данных за счет соединения строк на основе одного или нескольких ключей.

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

Сначала нужно импортировать библиотеку pandas и определить два объекта , которые будут примерами в этом разделе.

Выполним соединение, применив функцию к двум объектам.

Получившийся объект состоит из всех строк с общим . В дополнение к общей колонке добавлены и те, что присутствуют только в первом и втором объектах.

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

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

В этом случае два объекта имеют колонки с одинаковыми названиями. Поэтому при запуске результата не будет.

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

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

Но часто появляется другая проблема, когда есть два без колонок с одинаковыми названиями. Для исправления ситуации нужно использовать и , которые определяют ключевые колонки для первого и второго объектов . Дальше следует пример.

По умолчанию функция выполняет (внутреннее соединение). Ключ в финальном объекте — результат пересечения.

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

Для соединения нескольких ключей, нужно просто в параметр on добавить список.

Удаление

Еще одна операция, связанная с объектами — удаление. Удалить строку или колонку не составит труда, потому что метки используются для обозначения индексов и названий колонок.

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

Например, возьмем в качестве примера случай, где из объекта нужно удалить один элемент. Для этого определим базовый объект из четырех элементов с 4 отдельными метками.

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

Для удаления большего количества элементов, передайте массив с соответствующими индексами.

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

ball pen pencil paper
red 1 2 3
blue 4 5 6 7
yellow 8 9 10 11
white 12 13 14 15

Для удаления строк просто передайте индексы строк.

ball pen pencil paper
red 1 2 3
white 12 13 14 15

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

ball paper
red 3
blue 4 7
yellow 8 11
white 12 15

Join DataFrames

In this section, you will practice the various join logics available to merge pandas DataFrames based on some common column/key. The logic behind these joins is very much the same that you have in SQL when you join tables.

Full Outer Join

The combines the results of both the left and the right outer joins. The joined DataFrame will contain all records from both the DataFrames and fill in s for missing matches on either side. You can perform a full outer join by specifying the argument as in the function:

id Feature1_x Feature2_x Feature1_y Feature2_y
1 A B K L
1 2 C D M N
2 3 E F NaN NaN
3 4 G H NaN NaN
4 5 I J NaN NaN
5 6 NaN NaN O P
6 7 NaN NaN Q R
7 8 NaN NaN S T

You can notice that the resulting DataFrame had all the entries from both the tables with values for missing matches on either side. However, one more thing to notice is the suffix which got appended to the column names to show which column came from which DataFrame. The default suffixes are and , however, you can modify them by specifying the argument in the function:

id Feature1_left Feature2_left Feature1_right Feature2_right
1 A B K L
1 2 C D M N
2 3 E F NaN NaN
3 4 G H NaN NaN
4 5 I J NaN NaN
5 6 NaN NaN O P
6 7 NaN NaN Q R
7 8 NaN NaN S T

Inner Join

The produces only the set of records that match in both DataFrame A and DataFrame B. You have to pass in the argument of function to do inner join:

id Feature1_x Feature2_x Feature1_y Feature2_y
1 A B K L
1 2 C D M N

Right Join

The produces a complete set of records from DataFrame B (right DataFrame), with the matching records (where available) in DataFrame A (left DataFrame). If there is no match, the right side will contain null. You have to pass in the argument of function to do right join:

id Feature1_x Feature2_x Feature1_y Feature2_y
1 A B K L
1 2 C D M N
2 6 NaN NaN O P
3 7 NaN NaN Q R
4 8 NaN NaN S T

Left Join

The produces a complete set of records from DataFrame A (left DataFrame), with the matching records (where available) in DataFrame B (right DataFrame). If there is no match, the left side will contain null. You have to pass in the argument of function to do left join:

id Feature1_x Feature2_x Feature1_y Feature2_y
1 A B K L
1 2 C D M N
2 3 E F NaN NaN
3 4 G H NaN NaN
4 5 I J NaN NaN

Joining on index

Sometimes you may have to perform the join on the indexes or the row labels. To do so, you have to specify (for the indexes of the right DataFrame) and (for the indexes of the left DataFrame) as :

id_x Feature1_x Feature2_x id_y Feature1_y Feature2_y
1 A B 1 K L
1 2 C D 2 M N
2 3 E F 6 O P
3 4 G H 7 Q R
4 5 I J 8 S T

Create a DataFrame from List of Dicts

List of Dictionaries can be passed as input data to create a DataFrame. The dictionary keys are by default taken as column names.

Example 1

The following example shows how to create a DataFrame by passing a list of dictionaries.

import pandas as pd
data = 
df = pd.DataFrame(data)
print df

Its output is as follows −

    a    b      c
0   1   2     NaN
1   5   10   20.0

Note − Observe, NaN (Not a Number) is appended in missing areas.

Example 2

The following example shows how to create a DataFrame by passing a list of dictionaries and the row indices.

import pandas as pd
data = 
df = pd.DataFrame(data, index=)
print df

Its output is as follows −

        a   b       c
first   1   2     NaN
second  5   10   20.0

Example 3

The following example shows how to create a DataFrame with a list of dictionaries, row indices, and column indices.

import pandas as pd
data = 

#With two column indices, values same as dictionary keys
df1 = pd.DataFrame(data, index=, columns=)

#With two column indices with one index with other name
df2 = pd.DataFrame(data, index=, columns=)
print df1
print df2

Its output is as follows −

#df1 output
         a  b
first    1  2
second   5  10

#df2 output
         a  b1
first    1  NaN
second   5  NaN

Note − Observe, df2 DataFrame is created with a column index other than the dictionary key; thus, appended the NaN’s in place. Whereas, df1 is created with column indices same as dictionary keys, so NaN’s appended.

Column Deletion

Columns can be deleted or popped; let us take an example to understand how.

Example

# Using the previous DataFrame, we will delete a column
# using del function
import pandas as pd

d = {'one' : pd.Series(, index=), 
   'two' : pd.Series(, index=), 
   'three' : pd.Series(, index=)}

df = pd.DataFrame(d)
print ("Our dataframe is:")
print df

# using del function
print ("Deleting the first column using DEL function:")
del df
print df

# using pop function
print ("Deleting another column using POP function:")
df.pop('two')
print df

Its output is as follows −

Our dataframe is:
      one   three  two
a     1.0    10.0   1
b     2.0    20.0   2
c     3.0    30.0   3
d     NaN     NaN   4

Deleting the first column using DEL function:
      three    two
a     10.0     1
b     20.0     2
c     30.0     3
d     NaN      4

Deleting another column using POP function:
   three
a  10.0
b  20.0
c  30.0
d  NaN

Конкатенация

Еще один тип объединения данных — конкатенация. NumPy предоставляет функцию для ее выполнения.

С библиотекой pandas и ее структурами данных, такими как и , именованные оси позволяют и дальше обобщать конкатенацию массивов. Для этого в pandas есть функция .

По умолчанию функция работает на и возвращает объект . Если задать значением , то результатом будет объект .

Проблема с этой операцией в том, что конкатенированные части не определяются в итоговом объекте. Например, нужно создать иерархический индекс на оси конкатенации. Для этого требуется использовать параметр .

В случае объединения двух по ключи становятся заголовками колонок объекта .

Пока что в примерах конкатенация применялась только к объектам , но та же логика работает и с .

О курсе

Мы не ставим себе задачу разработать еще один исчерпывающий вводный курс по машинному обучению или анализу данных (т.е. это не замена специализации Яндекса и МФТИ, дополнительному образованию ВШЭ и прочим фундаментальным онлайн- и оффлайн-программам и книжкам). Цель этой серии статей — быстро освежить имеющиеся у вас знания или помочь найти темы для дальнейшего изучения. Подход примерно как у авторов книги Deep Learning, которая начинается с обзора математики и основ машинного обучения — краткого, максимально ёмкого и с обилием ссылок на источники.

Если вы планируете пройти курс, то предупреждаем: при подборе тем и создании материалов мы ориентируемся на то, что наши слушатели знают математику на уровне 2 курса технического вуза и хотя бы немного умеют программировать на Python. Это не жёсткие критерии отбора, а всего лишь рекомендации — можно записаться на курс, не зная математики или Python, и параллельно навёрстывать:

  • базовую математику (математический анализ, линейную алгебру, оптимизацию, теорвер и статистику) можно повторить по этим конспектам Yandex & MIPT (делимся с разрешения). Кратко, на русском – то что надо. Если подробно, то матан – Кудрявцев, линал – Кострикин, оптимизация – Boyd (англ.), теорвер и статистика – Кибзун. Плюс отличные онлайн-курсы МФТИ и ВШЭ на Coursera;
  • по Python хватит небольшого интерактивного туториала на Datacamp или этого репозитория по Python и базовым алгоритмам и структурам данных. Что-то более продвинутое – это, например, курс питерского Computer Science Center;
  • что касается машинного обучения, то есть классический (но слегка устаревший) курс Andrew Ng «Machine Learning»(Stanford, Coursera). На русском языке есть отличная специализация МФТИ и Яндекса «Машинное обучение и анализ данных». А вот и лучшие книги: «Pattern recognition and Machine Learning» (Bishop), «Machine Learning: A Probabilistic Perspective » (Murphy), «The elements of statistical learning» (Hastie, Tibshirani, Friedman), «Deep Learning» (Goodfellow, Bengio, Courville). Книга Goodfellow начинается с обзора математики и понятного и интересного введения в машинное обучение и внутреннее устройство его алгоритмов. Приятно, что теперь про глубокое обучение есть книга и на русском языке – «Глубокое обучение: погружение в мир нейронных сетей» (Николенко С. И., Кадурин А. А., Архангельская Е. О.).

Также про курс рассказано в этом анонсе.

Какое ПО нужно

Для прохождения курса нужен ряд Python-пакетов, большинство из них есть в сборке Anaconda с Python 3.6. Чуть позже понадобятся и другие библиотеки, об этом будет сказано дополнительно. Полный список можно посмотреть в Dockerfile.

Также можно воспользоваться Docker-контейнером, в котором все необходимое ПО уже установлено. Подробности – на странице Wiki репозитория.

Как подключиться к курсу

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

  • Заполните опрос, указав в нем реальное ФИО;
  • Вступите в сообщество OpenDataScience, обсуждение курса ведется в канале #mlcourse.ai.

pandas.DataFrame

A pandas DataFrame can be created using the following constructor −

pandas.DataFrame( data, index, columns, dtype, copy)

The parameters of the constructor are as follows −

Sr.No Parameter & Description
1

data

data takes various forms like ndarray, series, map, lists, dict, constants and also another DataFrame.

2

index

For the row labels, the Index to be used for the resulting frame is Optional Default np.arange(n) if no index is passed.

3

columns

For column labels, the optional default syntax is — np.arange(n). This is only true if no index is passed.

4

dtype

Data type of each column.

5

copy

This command (or whatever it is) is used for copying of data, if the default is False.

Row Selection, Addition, and Deletion

We will now understand row selection, addition and deletion through examples. Let us begin with the concept of selection.

Selection by Label

Rows can be selected by passing row label to a loc function.

import pandas as pd

d = {'one' : pd.Series(, index=), 
   'two' : pd.Series(, index=)}

df = pd.DataFrame(d)
print df.loc

Its output is as follows −

one 2.0
two 2.0
Name: b, dtype: float64

The result is a series with labels as column names of the DataFrame. And, the Name of the series is the label with which it is retrieved.

Selection by integer location

Rows can be selected by passing integer location to an iloc function.

import pandas as pd

d = {'one' : pd.Series(, index=),
   'two' : pd.Series(, index=)}

df = pd.DataFrame(d)
print df.iloc

Its output is as follows −

one   3.0
two   3.0
Name: c, dtype: float64

Slice Rows

Multiple rows can be selected using ‘ : ’ operator.

import pandas as pd

d = {'one' : pd.Series(, index=), 
   'two' : pd.Series(, index=)}

df = pd.DataFrame(d)
print df

Its output is as follows −

   one  two
c  3.0    3
d  NaN    4

Addition of Rows

Add new rows to a DataFrame using the append function. This function will append the rows at the end.

import pandas as pd

df = pd.DataFrame(, ], columns = )
df2 = pd.DataFrame(, ], columns = )

df = df.append(df2)
print df

Its output is as follows −

   a  b
0  1  2
1  3  4
0  5  6
1  7  8

Deletion of Rows

Use index label to delete or drop rows from a DataFrame. If label is duplicated, then multiple rows will be dropped.

If you observe, in the above example, the labels are duplicate. Let us drop a label and will see how many rows will get dropped.

import pandas as pd

df = pd.DataFrame(, ], columns = )
df2 = pd.DataFrame(, ], columns = )

df = df.append(df2)

# Drop rows with label 0
df = df.drop(0)

print df

Its output is as follows −

  a b
1 3 4
1 7 8

In the above example, two rows were dropped because those two contain the same label 0.

Previous Page
Print Page

Next Page  

Pandas: Insert new column to Dataframe using insert()

First of all reset dataframe i.e.

# Create a DataFrame object 
df_obj = pd.DataFrame(students,
 columns=,
 index=)

Contents dataframe df_obj are,

    Name  Age       City    Country
a   jack   34     Sydeny  Australia
b   Riti   30      Delhi      India
c  Vikas   31     Mumbai      India
d  Neelu   32  Bangalore      India
e   John   16   New York         US
f   Mike   17  las vegas         US

In all the previous solution, we added new column at the end of the dataframe, but suppose we want to add or insert a new column in between the other columns of the dataframe, then we can use the insert() function i.e.

# Insert column at the 2nd position of Dataframe
df_obj.insert(2, "Marks", , True)

df_obj

Output:

    Name  Age  Marks       City    Country
a   jack   34     10     Sydeny  Australia
b   Riti   30     20      Delhi      India
c  Vikas   31     45     Mumbai      India
d  Neelu   32     33  Bangalore      India
e   John   16     22   New York         US
f   Mike   17     11  las vegas         US

It inserted the column ‘Marks’ in between other columns.

Переиндексирование df.reindex()

Вы уже знаете, что после объявления в структуре данных объект нельзя менять. Но с помощью операции переиндексирования это можно решить.

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

Для того чтобы провести переиндексирование объекта библиотека pandas предоставляет функцию . Она создает новый объект со значениями из другого , которые теперь переставлены в соответствии с новой последовательностью меток.

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

Как видно по выводу, порядок меток можно поменять полностью. Значение, которое раньше соответствовало метке , удалено, зато есть новое с меткой .

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

Для лучшего понимания механизма работы этого режима автоматического индексирования создадим следующий объект .

В этом примере видно, что колонка с индексами — это не идеальная последовательность чисел. Здесь пропущены цифры 1, 2 и 4. В таком случае нужно выполнить операцию интерполяции и получить полную последовательность чисел. Для этого можно использовать с параметром равным . Более того, необходимо задать диапазон значений для индексов. Тут можно использовать в качестве аргумента.

Теперь в объекте есть элементы, которых не было в оригинальном объекте . Операция интерполяции сделала так, что наименьшие индексы стали значениями в объекте. Так, индексы 1 и 2 имеют значение 1, принадлежащее индексу 0.

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

В этом случае значения индексов 1 и 2 равны 5, которое принадлежит индексу 3.

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

item colors price new object
id
blue 1.2 blue ball
1 green 1.0 green pen
2 yellow 3.3 yellow pencil
3 red 0.9 red paper
4 white 1.7 white mug

Pivoting — сводные таблицы

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

Поворот с иерархическим индексированием

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

  • Укладка (stacking) — поворачивает структуру данных, превращая колонки в строки
  • Обратный процесс укладки (unstacking) — конвертирует строки в колонки

С помощью функции в можно развернуть данные и превратить колонки в строки, получив :

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

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

Поворот из «длинного» в «широкий» формат

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

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

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

Этот режим записи данных имеет свои недостатки. Первый — повторение некоторых полей. Если воспринимать колонки в качестве ключей, то данные в этом формате будет сложно читать, а особенно — понимать отношения между значениями ключей и остальными колонками.

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

В качестве критерия нужно выбрать колонку или несколько из них как основной ключ. Значения в них должны быть уникальными.

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

Еще с прошлого примера вы создавали в широком формате. Колонка выступала основным ключом, – вторым, а их значения формировали новые колонки в объекте.

В таком формате более компактен, а данные в нем — куда более читаемые.

Time-series friendly merging

Pandas provides special functions for merging Time-series DataFrames. Perhaps the most useful and popular one is the function. The is similar to an ordered left-join except that you match on nearest key rather than equal keys. For each row in the left DataFrame, you select the last row in the right DataFrame whose key is less than the left’s key. Both DataFrames must be sorted by the key.

Optionally an asof merge can perform a group-wise merge. This matches the key equally, in addition to the nearest match on the key.

For example, you might have trades and quotes, and you want to asof merge them. Here the left DataFrame is chosen as and right DataFrame as . They are asof merged on key and group-wise merged by their symbol.

time ticker price quantity
2016-05-25 13:30:00.023 MSFT 51.95 75
1 2016-05-25 13:30:00.038 MSFT 51.95 155
2 2016-05-25 13:30:00.048 GOOG 720.77 100
3 2016-05-25 13:30:00.048 GOOG 720.92 100
4 2016-05-25 13:30:00.048 AAPL 98.00 100
time ticker bid ask
2016-05-25 13:30:00.023 GOOG 720.50 720.93
1 2016-05-25 13:30:00.023 MSFT 51.95 51.96
2 2016-05-25 13:30:00.030 MSFT 51.97 51.98
3 2016-05-25 13:30:00.041 MSFT 51.99 52.00
4 2016-05-25 13:30:00.048 GOOG 720.50 720.93
5 2016-05-25 13:30:00.049 AAPL 97.99 98.01
6 2016-05-25 13:30:00.072 GOOG 720.50 720.88
7 2016-05-25 13:30:00.075 MSFT 52.01 52.03
time ticker price quantity bid ask
2016-05-25 13:30:00.023 MSFT 51.95 75 51.95 51.96
1 2016-05-25 13:30:00.038 MSFT 51.95 155 51.97 51.98
2 2016-05-25 13:30:00.048 GOOG 720.77 100 720.50 720.93
3 2016-05-25 13:30:00.048 GOOG 720.92 100 720.50 720.93
4 2016-05-25 13:30:00.048 AAPL 98.00 100 NaN NaN

If you observe carefully, you can notice the reason behind appearing in the ticker row. Since the right DataFrame didn’t have any value less than (the in the left table) for ticker, s were introduced in the and columns.

You can also set a predefined tolerance level for column. Suppose you only want asof merge within 2ms between the time and the time, then you will have to specify argument:

time ticker price quantity bid ask
2016-05-25 13:30:00.023 MSFT 51.95 75 51.95 51.96
1 2016-05-25 13:30:00.038 MSFT 51.95 155 NaN NaN
2 2016-05-25 13:30:00.048 GOOG 720.77 100 720.50 720.93
3 2016-05-25 13:30:00.048 GOOG 720.92 100 720.50 720.93
4 2016-05-25 13:30:00.048 AAPL 98.00 100 NaN NaN

Notice the difference between the above and previous result. Rows are not merged if the time tolerance didn’t match .

Create a DataFrame from Dict of ndarrays / Lists

All the ndarrays must be of same length. If index is passed, then the length of the index should equal to the length of the arrays.

If no index is passed, then by default, index will be range(n), where n is the array length.

Example 1

import pandas as pd
data = {'Name':,'Age':}
df = pd.DataFrame(data)
print df

Its output is as follows −

      Age      Name
0     28        Tom
1     34       Jack
2     29      Steve
3     42      Ricky

Note − Observe the values 0,1,2,3. They are the default index assigned to each using the function range(n).

Example 2

Let us now create an indexed DataFrame using arrays.

import pandas as pd
data = {'Name':,'Age':}
df = pd.DataFrame(data, index=)
print df

Its output is as follows −

         Age    Name
rank1    28      Tom
rank2    34     Jack
rank3    29    Steve
rank4    42    Ricky

Note − Observe, the index parameter assigns an index to each row.

Чтение и запись данных

pandas поддерживает все самые популярные форматы хранения данных: csv, excel, sql, буфер обмена, html и многое другое:

Чаще всего приходится работать с csv-файлами. Например, чтобы сохранить наш DataFrame со странами, достаточно написать:

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

Считать данные из csv-файла и превратить в DataFrame можно функцией read_csv.

Аргумент sep указывает разделитесь столбцов. Существует ещё масса способов сформировать DataFrame из различных источников, но наиболее часто используют CSV, Excel и SQL. Например, с помощью функции read_sql, pandas может выполнить SQL запрос и на основе ответа от базы данных сформировать необходимый DataFrame. За более подробной информацией стоит обратиться к официальной документации.

Арифметика и выравнивание данных

Наверное, самая важная особенность индексов в этой структуре данных — тот факт, что pandas может выравнивать индексы двух разных структур

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

В качестве примера можно взять два объекта с разными метками.

Теперь воспользуемся базовой операцией сложения. Как видно по примеру, некоторые метки есть в обоих структурах, а остальные — только в одной. Если они есть в обоих случаях, их значения складываются, а если только в одном — то значением будет .

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

ball pen pencil paper
red 1 2 3
blue 4 5 6 7
yellow 8 9 10 11
white 12 13 14 15
mug pen ball
blue 1 2
green 3 4 5
white 6 7 8
yellow 9 10 11
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *