Π Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡƒ: Pandas вмСсто SQL

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ SQL-запросы для Pandas ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для структурированных Π΄Π°Π½Π½Ρ‹Ρ….

ОблоТка: Π Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡƒ: Pandas вмСсто SQL

РаньшС SQL ΠΊΠ°ΠΊ инструмСнта Π±Ρ‹Π»ΠΎ достаточно для ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°: быстрого поиска Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° ΠΏΠΎ Π½ΠΈΠΌ.

БСйчас Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ ΠΈ Π½Π΅ всСгда ΠΏΠΎΠ΄ Π½ΠΈΠΌΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ «рСляционныС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…Β». Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ CSV-Ρ„Π°ΠΉΠ»Ρ‹, простой тСкст, Parquet, HDF5 ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π—Π΄Π΅ΡΡŒ Π²Π°ΠΌ ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Pandas.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Pandas?

Pandas β€” это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° языкС Python, созданная для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ ΠΈ поддСрТиваСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Anaconda. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для структурированных (Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ…) Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Pandas позволяСт Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

SQL β€” Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык. Он позволяСт ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ всё Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ запрос ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² английском языкС. Бинтаксис Pandas сильно отличаСтся ΠΎΡ‚ SQL. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ примСняСтС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊ Π½Π°Π±ΠΎΡ€Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚Π΅ ΠΈΡ… Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ для прСобразования ΠΈ измСнСния.

Π Π°Π·Π±ΠΎΡ€ SQL-запроса

SQL-запрос состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. ΠœΠ΅ΠΆΠ΄Ρƒ этими словами Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ характСристики Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ каркаса запросов Π±Π΅Π· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠΊΠΈ:

  • SELECT… FROM… WHERE…
  • GROUP BY… HAVING…
  • ORDER BY…
  • LIMIT… OFFSET…

Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ выраТСния, Π½ΠΎ эти самыС основныС. Π§Ρ‚ΠΎΠ±Ρ‹ пСрСвСсти выраТСния Π² Pandas, Π½ΡƒΠΆΠ½ΠΎ сначала Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅:

			import pandas as pd

airports = pd.read_csv('data/airports.csv')
airport_freq = pd.read_csv('data/airport-frequencies.csv')
runways = pd.read_csv('data/runways.csv')
		

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ здСсь.

SELECT, WHERE, DISTINCT, LIMIT

НиТС прСдставлСно нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ SELECT. НСнуТныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡ‚ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LIMIT ΠΈ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ WHERE. Для удалСния Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ DISTINCT.

SELECT со мноТСствСнным условиСм

НСсколько условий Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° &. Если Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подмноТСство Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… столбцов ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, это подмноТСство примСняСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ°Ρ€Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок.

ORDER BY

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Pandas сортируСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ. Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ сортировки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ascending=False.

IN ΠΈ NOT IN

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Ρ†Π΅Π»Ρ‹Π΅ списки, сущСствуСт условиС IN. Π’ Pandas ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ .isin() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ любоС условиС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ~ (Ρ‚ΠΈΠ»ΡŒΠ΄Π°).

GROUP BY, COUNT, ORDER BY

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° .groupby(). Π•ΡΡ‚ΡŒ нСбольшая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ сСмантикой COUNT Π² SQL ΠΈ Pandas. Π’ Pandas .count() Π²Π΅Ρ€Π½Ρ‘Ρ‚ значСния non-null/NaN. Для получСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΊΠ°ΠΊ Π² SQL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ .size().

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ нСскольким полям. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Pandas сортируСт ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ списку ΠΏΠΎΠ»Π΅ΠΉ, поэтому Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅Ρ‚ нСобходимости Π² .sort_values(). Если Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ поля для сортировки ΠΈΠ»ΠΈ DESC вмСсто ASC, ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ явно:

ИспользованиС .to_frame() ΠΈ .reset_index() обуславливаСтся сортировкой ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ полю (size). Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ° DataFrame. ПослС Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Pandas Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ GroupByObject. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² DataFrame. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .reset_index() пСрСзапускаСтся нумСрация строк для Ρ„Ρ€Π΅ΠΉΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ….

HAVING

Π’ SQL ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ сгруппированныС Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ условиС HAVING. Π’ Pandas ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .filter() ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Python (ΠΈΠ»ΠΈ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅), которая Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ True, Ссли Π³Ρ€ΡƒΠΏΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ N записСй

Допустим, сдСланы Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ запросы ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ имССтся Ρ„Ρ€Π΅ΠΉΠΌ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΈΠΌΠ΅Π½Π΅ΠΌ by_country, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит количСство аэропортов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ странС:

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ упорядочим Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ airport_count ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 10 стран с наибольшим количСством аэропортов. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Π±ΠΎΠ»Π΅Π΅ слоТный случай, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Β«ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 10Β» послС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 10 записСй:

АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: MIN, MAX, MEAN

Учитывая Ρ„Ρ€Π΅ΠΉΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ (Π΄Π°Π½Π½Ρ‹Π΅ Π²Π·Π»Ρ‘Ρ‚Π½ΠΎ-посадочной полосы), рассчитаСм ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈ ΡΡ€Π΅Π΄Π½ΡŽΡŽ Π΄Π»ΠΈΠ½Ρƒ Π’ΠŸΠŸ.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ с SQL-запросом Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой столбцы. Но Π² Pandas Π΄Π°Π½Π½Ρ‹Π΅ прСдставлСны строками.

Π€Ρ€Π΅ΠΉΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .T, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ столбцы.

JOIN

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ .merge(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Pandas. НСобходимо ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΈΠΌ столбцам Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ (left_on ΠΈ right_on), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏ соСдинСния: inner (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), left (соотвСтствуСт LEFT OUTER Π² SQL), right (RIGHT OUTER Π² SQL) ΠΈΠ»ΠΈ outer (FULL OUTER Π² SQL).

UNION ALL ΠΈ UNION

pd.concat() β€” эквивалСнт UNION ALL Π² SQL.

Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ΠΎΠΌ UNION (дСдупликация) являСтся .drop_duplicates().

INSERT

Пока ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ»Π°ΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°, Π½ΠΎ Π² процСссС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π’ Pandas для добавлСния Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅Ρ‚ эквивалСнта INSERT Π² SQL. ВмСсто этого слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащий Π½ΠΎΠ²Ρ‹Π΅ записи, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ„Ρ€Π΅ΠΉΠΌΠ°.

UPDATE

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² исходном Ρ„Ρ€Π΅ΠΉΠΌΠ΅.

DELETE

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Ρ€Π΅ΠΉΠΌΠ° Π² Pandas β€” это Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌ Π½Π° строки. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСксы строк ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ .drop().

ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Pandas Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НСкоторыС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ inplace=True, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с исходным Ρ„Ρ€Π΅ΠΉΠΌΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… вмСсто Π½ΠΎΠ²ΠΎΠ³ΠΎ. НапримСр, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ индСкс Π½Π° мСстС:

			df.reset_index(drop=True, inplace=True)
		

Однако ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ .loc (Π²Ρ‹ΡˆΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с UPDATE) просто Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ индСксы записСй для ΠΈΡ… обновлСния, ΠΈ значСния ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° мСстС. Π’Π°ΠΊΠΆΠ΅, Ссли всС значСния Π² столбцС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ (df['url'] = 'http://google.com') ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ столбСц (df['total_cost'] = df['price'] * df['quantity']), эти Π΄Π°Π½Π½Ρ‹Π΅ измСнятся Π½Π° мСстС.

Pandas β€” это большС, Ρ‡Π΅ΠΌ просто ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ запросов. Π‘ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСобразования.

Экспорт Π²ΠΎ мноТСство Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ²

			df.to_csv(...)  # Π² csv-Ρ„Π°ΠΉΠ»
df.to_hdf(...)  # Π² HDF5-Ρ„Π°ΠΉΠ»
df.to_pickle(...)  # Π² сСриализованный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
df.to_sql(...)  # Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… SQL
df.to_excel(...)  # Π² Ρ„Π°ΠΉΠ» Excel
df.to_json(...)  # Π² строку JSON
df.to_html(...)  # ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² качСствС HTML-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
df.to_feather(...)  # Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ feather-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
df.to_latex(...)  # Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΡƒΡŽ срСду
df.to_stata(...)  # Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Stata
df.to_msgpack(...)  # msgpack-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (сСриализация)
df.to_gbq(...)  # Π² BigQuery-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (Google)
df.to_string(...)  # Π² ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄
df.to_clipboard(...)
# Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вставлСн Π² Excel
		

БоставлСниС Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ²

			top_10.plot(
    x='iso_country', 
    y='airport_count',
    kind='barh',
    figsize=(10, 7),
    title='Top 10 countries with most airports')
		

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими Ρ€Π°Π±ΠΎΡ‚Π°ΠΌΠΈ

Π›ΡƒΡ‡ΡˆΠ΅Π΅ мСсто для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ запросов Pandas, Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ β€” Jupyter notebook. НСкоторыС люди (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π”ΠΆΠ΅ΠΉΠΊ ВандСрплас) ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ Ρ‚Π°ΠΌ Π΄Π°ΠΆΠ΅ Ρ†Π΅Π»Ρ‹Π΅ ΠΊΠ½ΠΈΠ³ΠΈ. ΠΠΎΠ²ΡƒΡŽ запись Π² Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ просто:

			$ pip install jupyter
$ jupyter notebook
		

ПослС этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  • ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсу localhost:8888;
  • Π½Π°ΠΆΠ°Ρ‚ΡŒ Β«NewΒ» ΠΈ Π΄Π°Ρ‚ΡŒ имя Π²Π°ΡˆΠ΅ΠΌΡƒ Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρƒ;
  • Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅;
  • ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitHub ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° свой Π±Π»ΠΎΠΊΠ½ΠΎΡ‚ (Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .ipynb).

Π£ GitHub Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ встроСнный просмотрщик для Π±Π»ΠΎΠΊΠ½ΠΎΡ‚ΠΎΠ² Jupyter с ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ Markdown.

Π’ качСствС подсказки Π½Π° стартС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΎΠΊ ΠΏΠΎ Python. Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΊΠ½ΠΈΠ³ ΠΏΠΎ SQL.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ