python sql pandas csv excel
Ovládli jste základy pythonovské knihovny Pandas, ale přesto si občas říkáte, že se vám některé věci dělají lépe pomocí SQL? Určitě nejste sami!
V tomto článku si ukážeme, jak snadno nahrajete CSV a Excel soubor do SQL databáze, abyste mohli používat mocný příkaz SQL SELECT
. A také spojovat data pomocí SQL JOINů. Což je - a to si klidně přiznejme - přeci jen příjemnější, než používat pandas merge
.
Jako bonus si data z výsledného SQL dotazu uložíte do Excelu. A to vše jen na několika řádcích kódu.
Zdrojové soubory
Data o průměrných mzdách jsme si vypůjčili z ČSÚ.
Data byla rozdělena do 2 souborů: CSV soubor, který obsahuje data o počtu zaměstnanců a průměrné mzdě, a číselník jednotlivých odvětví v Excelu.
Oba soubory si stáhněte.
Import knihoven a nastavení
Budete potřebovat 2 knihovny - Pandas a SQLite.
Pandas není standardní součástí instalace Pythonu. Pokud ji ve svém pythonovském prostředí nemáte, budete si jí muset nainstalovat.
SQLite patří mezi standardní knihovny, které Python už obsahuje, takže nemusíte dělat vůbec nic. 😉
# Import knihoven
import pandas as pd
import sqlite3
# Používáte Jupyter notebook?
# Díky následujícímu nastavení se vám dataframe bude lépe prohlížet
pd.options.display.max_columns = None
pd.options.display.max_rows = None
pd.options.display.max_colwidth = None
Nahrání souborů do dataframe
# Nezapomeňte upravit cestu k souborům
csv = pd.read_csv("./prumerna-mzda-4Q-2023.csv")
excel = pd.read_excel("./cz-nace-odvetvi.xlsx")
Kontrola
csv.head()
CZ-NACE Průměrný počet zaměstnanců Průměrná hrubá měsíční mzda
------------------------------------------------------------------
0 A 90400 37501
1 B 18200 53762
2 C 1071500 44371
3 D 34700 69336
4 E 53200 43239
excel.head()
CZ-NACE Odvětví
------------------------------------------------------------
0 A Zemědělství, lesnictví a rybářství
1 B Těžba a dobývání
2 C Zpracovatelský průmysl
3 D Výroba a rozvod elektřiny, plynu, tepla a klim...
4 E Zásobování vodou; činnosti související s odpad...
Nahrání dataframe do SQL
Vytvoříte soubor SQLite databáze, který pojmenujete mzdy.db
. Do něho pak nahrajete data z CSV souboru a Excelu.
with sqlite3.connect("./mzdy.db") as conn:
csv.to_sql("tabulka_mzdy", # Název tabulky
con=conn, # Spojení (Connection)
if_exists="replace", # Pokud tabulka v DB existuje, nahraď jí
index=False # Index z dataframu nepotřebujeme
)
excel.to_sql("tabulka_nace",
con=conn,
if_exists="replace",
index=False)
Pokud tento příkaz neskončí chybovou hláškou, vše proběhlo tak, jak mělo.
Jednoduchý join
Zkuste si propojit obě tabulky pomocí joinu. Díky SQL je to snadné.
Data, která dotaz vrátí, se načtou do dataframu.
sql_query = """
SELECT n."Odvětví", m.*
FROM tabulka_mzdy m
INNER JOIN tabulka_nace n
ON m."CZ-NACE" = n."CZ-NACE"
;
"""
with sqlite3.connect("./mzdy.db") as conn:
df = pd.read_sql(sql_query, con=conn) # Načti výsledek SQL dotazu do dataframu
df.head(3)
Odvětví CZ-NACE Průměrný počet zaměstnanců Průměrná hrubá měsíční mzda
0 Zemědělství, lesnictví a rybářství A 90400 37501
1 Těžba a dobývání B 18200 53762
2 Zpracovatelský průmysl C 1071500 44371
Uložení výsledku do Excelu
Pro pohodlnější práci si můžete výsledný dataframe uložit do Excelu.
df.to_excel("./mzdy.xlsx", index=False)
Závěr
V tomto krátkém článku jsme se pouze dotkli vzrušujících možností, které se otevírají spojením Pythonu a SQL. Na ty další už určitě přijdete sami.
A pokud ne, můžete vyzkoušet naše kurzy Pythonu nebo kurzy SQL.