import numpy as np
import pandas as pd
Скачиваем данные с помощью утилиты wget
:
!wget https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/orders.csv
--2023-02-01 21:48:36-- https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/orders.csv Распознаётся raw.githubusercontent.com (raw.githubusercontent.com)… 185.199.111.133, 185.199.110.133, 185.199.108.133, ... Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... соединение установлено. HTTP-запрос отправлен. Ожидание ответа… 200 OK Длина: 216229 (211K) [text/plain] Сохранение в: «orders.csv.2» orders.csv.2 100%[===================>] 211,16K --.-KB/s за 0,09s 2023-02-01 21:48:36 (2,20 MB/s) - «orders.csv.2» сохранён [216229/216229]
С помощью стандартного модуля csv
взглянем на первые 5 строк CSV-файла:
import csv
with open('orders.csv') as file:
reader = csv.reader(file)
for i, row in enumerate(reader):
print(row)
if i >= 5:
break
['id', 'order_date', 'ship_mode', 'customer_id', 'sales'] ['100006', '2014-09-07', 'Standard', 'DK-13375', '377.97'] ['100090', '2014-07-08', 'Standard', 'EB-13705', '699.192'] ['100293', '2014-03-14', 'Standard', 'NF-18475', '91.056'] ['100328', '2014-01-28', 'Standard', 'JC-15340', '3.928'] ['100363', '2014-04-08', 'Standard', 'JM-15655', '21.376']
Теперь используем pandas для работы с csv:
orders = pd.read_csv('orders.csv')
orders.head()
id | order_date | ship_mode | customer_id | sales | |
---|---|---|---|---|---|
0 | 100006 | 2014-09-07 | Standard | DK-13375 | 377.970 |
1 | 100090 | 2014-07-08 | Standard | EB-13705 | 699.192 |
2 | 100293 | 2014-03-14 | Standard | NF-18475 | 91.056 |
3 | 100328 | 2014-01-28 | Standard | JC-15340 | 3.928 |
4 | 100363 | 2014-04-08 | Standard | JM-15655 | 21.376 |
Используем столбец 0 в качестве индекса:
orders = pd.read_csv('orders.csv',
index_col=0)
orders.head()
order_date | ship_mode | customer_id | sales | |
---|---|---|---|---|
id | ||||
100006 | 2014-09-07 | Standard | DK-13375 | 377.970 |
100090 | 2014-07-08 | Standard | EB-13705 | 699.192 |
100293 | 2014-03-14 | Standard | NF-18475 | 91.056 |
100328 | 2014-01-28 | Standard | JC-15340 | 3.928 |
100363 | 2014-04-08 | Standard | JM-15655 | 21.376 |
Исследуем типы столбцов в этом датафрейме:
orders.dtypes
order_date object ship_mode object customer_id object sales float64 dtype: object
Можно преобразовывать типы данных, если требуется, в момент загрузки:
orders = pd.read_csv('orders.csv',
dtype={'sales': 'object'}) # np.str
orders.dtypes
id int64 order_date object ship_mode object customer_id object sales object dtype: object
Указываем, что столбец order_date
должен иметь тип datetime
:
orders = pd.read_csv('orders.csv',
parse_dates=["order_date"])
orders.dtypes
id int64 order_date datetime64[ns] ship_mode object customer_id object sales float64 dtype: object
Задаем новый набор имен для столбцов, все имеют нижний регистр, header=0
задает строку заголовков:
df = pd.read_csv('orders.csv',
header=0,
names=['1', '2', '3', '4', '5'])
df.head()
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
0 | 100006 | 2014-09-07 | Standard | DK-13375 | 377.970 |
1 | 100090 | 2014-07-08 | Standard | EB-13705 | 699.192 |
2 | 100293 | 2014-03-14 | Standard | NF-18475 | 91.056 |
3 | 100328 | 2014-01-28 | Standard | JC-15340 | 3.928 |
4 | 100363 | 2014-04-08 | Standard | JM-15655 | 21.376 |
!wget https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/customers.csv
--2023-02-01 21:48:37-- https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/customers.csv Распознаётся raw.githubusercontent.com (raw.githubusercontent.com)… 185.199.110.133, 185.199.108.133, 185.199.109.133, ... Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... соединение установлено. HTTP-запрос отправлен. Ожидание ответа… 200 OK Длина: 41862 (41K) [text/plain] Сохранение в: «customers.csv.2» customers.csv.2 100%[===================>] 40,88K --.-KB/s за 0,03s 2023-02-01 21:48:37 (1,18 MB/s) - «customers.csv.2» сохранён [41862/41862]
pd.read_csv("customers.csv").head()
id | name | segment | state | city | |
---|---|---|---|---|---|
0 | CG-12520 | Claire Gute | Consumer | Kentucky | Henderson |
1 | DV-13045 | Darrin Van Huff | Corporate | California | Los Angeles |
2 | SO-20335 | Sean O'Donnell | Consumer | Florida | Fort Lauderdale |
3 | BH-11710 | Brosina Hoffman | Consumer | California | Los Angeles |
4 | AA-10480 | Andrew Allen | Consumer | North Carolina | Concord |
Считываем в данных только столбцы Date
и Close
и индексируем по столбцу Date
:
df2 = pd.read_csv("customers.csv",
usecols=['id', 'name'],
index_col=['id'])
df2.head()
name | |
---|---|
id | |
CG-12520 | Claire Gute |
DV-13045 | Darrin Van Huff |
SO-20335 | Sean O'Donnell |
BH-11710 | Brosina Hoffman |
AA-10480 | Andrew Allen |
Сохраняем датафрейм df2
в новый csv-файл задаем имя индекса как id
:
#df2.to_csv("customers_modified.csv", index_label='id_index')
df2.to_csv("customers_modified.csv")
С помощью модуля csv
взглянем на первые 5 строк CSV-файла:
import csv
with open('customers_modified.csv') as file:
reader = csv.reader(file)
for i,row in enumerate(reader):
print(row)
if i >= 5:
break
['id', 'name'] ['CG-12520', 'Claire Gute'] ['DV-13045', 'Darrin Van Huff'] ['SO-20335', "Sean O'Donnell"] ['BH-11710', 'Brosina Hoffman'] ['AA-10480', 'Andrew Allen']
Можем посмотреть содержимое файла с помощью утилиты cat
:
#!cat customers_modified.csv
Используем функцию read_table
с параметром sep=','
, чтобы прочитать CSV-файл:
df = pd.read_table("orders.csv",
sep=',')
df.head()
id | order_date | ship_mode | customer_id | sales | |
---|---|---|---|---|---|
0 | 100006 | 2014-09-07 | Standard | DK-13375 | 377.970 |
1 | 100090 | 2014-07-08 | Standard | EB-13705 | 699.192 |
2 | 100293 | 2014-03-14 | Standard | NF-18475 | 91.056 |
3 | 100328 | 2014-01-28 | Standard | JC-15340 | 3.928 |
4 | 100363 | 2014-04-08 | Standard | JM-15655 | 21.376 |
Сохраняем как данные, в которых разделителем является вертикальная черта:
df.to_csv("orders_piped.txt",
sep='|')
Смотрим, как сработал программный код:
import csv
with open('orders_piped.txt') as file:
reader = csv.reader(file, delimiter=',')
for i,row in enumerate(reader):
print(row)
if i >= 5:
break
['|id|order_date|ship_mode|customer_id|sales'] ['0|100006|2014-09-07|Standard|DK-13375|377.97'] ['1|100090|2014-07-08|Standard|EB-13705|699.192'] ['2|100293|2014-03-14|Standard|NF-18475|91.056'] ['3|100328|2014-01-28|Standard|JC-15340|3.928'] ['4|100363|2014-04-08|Standard|JM-15655|21.376']
#!cat orders_piped.txt
!wget https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/msft2.csv
--2023-02-01 21:48:38-- https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/msft2.csv Распознаётся raw.githubusercontent.com (raw.githubusercontent.com)… 185.199.108.133, 185.199.109.133, 185.199.111.133, ... Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... соединение установлено. HTTP-запрос отправлен. Ожидание ответа… 200 OK Длина: 544 [text/plain] Сохранение в: «msft2.csv.2» msft2.csv.2 100%[===================>] 544 --.-KB/s за 0s 2023-02-01 21:48:38 (22,6 MB/s) - «msft2.csv.2» сохранён [544/544]
Смотрим первые 6 наблюдений файла msft2.csv
:
with open('msft2.csv') as file:
reader = csv.reader(file, delimiter=',')
for i,row in enumerate(reader):
print(row)
if i >= 6:
break
['This is fun because the data does not start on the first line', '', '', '', '', ''] ['Date', 'Open', 'High', 'Low', 'Close', 'Volume'] ['', '', '', '', '', ''] ['And there is space between the header row and data', '', '', '', '', ''] ['7/21/2014', '83.46', '83.53', '81.81', '81.93', '2359300'] ['7/18/2014', '83.3', '83.4', '82.52', '83.35', '4020800'] ['7/17/2014', '84.35', '84.63', '83.33', '83.63', '1974000']
Считываем данные, пропустив строки 0
, 2
и 3
:
df = pd.read_csv("msft2.csv",
skiprows=[0, 2, 3])
df.head()
Date | Open | High | Low | Close | Volume | |
---|---|---|---|---|---|---|
0 | 7/21/2014 | 83.46 | 83.53 | 81.81 | 81.93 | 2359300 |
1 | 7/18/2014 | 83.30 | 83.40 | 82.52 | 83.35 | 4020800 |
2 | 7/17/2014 | 84.35 | 84.63 | 83.33 | 83.63 | 1974000 |
3 | 7/16/2014 | 83.77 | 84.91 | 83.66 | 84.91 | 1755600 |
4 | 7/15/2014 | 84.30 | 84.38 | 83.20 | 83.58 | 1874700 |
!wget https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/msft_with_footer.csv
--2023-02-01 21:48:38-- https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/msft_with_footer.csv Распознаётся raw.githubusercontent.com (raw.githubusercontent.com)… 185.199.109.133, 185.199.111.133, 185.199.110.133, ... Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... соединение установлено. HTTP-запрос отправлен. Ожидание ответа… 200 OK Длина: 154 [text/plain] Сохранение в: «msft_with_footer.csv.2» msft_with_footer.cs 100%[===================>] 154 --.-KB/s за 0s 2023-02-01 21:48:39 (6,12 MB/s) - «msft_with_footer.csv.2» сохранён [154/154]
Смотрим файл msft_with_footer.csv
:
with open('msft_with_footer.csv') as file:
reader = csv.reader(file, delimiter=',')
for row in reader:
print(row)
['Date', 'Open', 'High', 'Low', 'Close', 'Volume'] ['7/21/2014', '83.46', '83.53', '81.81', '81.93', '2359300'] ['7/18/2014', '83.3', '83.4', '82.52', '83.35', '4020800'] [] ['Uh oh', ' there is stuff at the end.']
!cat msft_with_footer.csv
Date,Open,High,Low,Close,Volume 7/21/2014,83.46,83.53,81.81,81.93,2359300 7/18/2014,83.3,83.4,82.52,83.35,4020800 Uh oh, there is stuff at the end.
Считываем, пропустив две строки в конце файла:
df = pd.read_csv("msft_with_footer.csv",
skipfooter=2,
engine='python')
df
Date | Open | High | Low | Close | Volume | |
---|---|---|---|---|---|---|
0 | 7/21/2014 | 83.46 | 83.53 | 81.81 | 81.93 | 2359300 |
1 | 7/18/2014 | 83.30 | 83.40 | 82.52 | 83.35 | 4020800 |
Считаем только первые три строки:
pd.read_csv("orders.csv",
nrows=3)
id | order_date | ship_mode | customer_id | sales | |
---|---|---|---|---|---|
0 | 100006 | 2014-09-07 | Standard | DK-13375 | 377.970 |
1 | 100090 | 2014-07-08 | Standard | EB-13705 | 699.192 |
2 | 100293 | 2014-03-14 | Standard | NF-18475 | 91.056 |
Пропускаем 100 строк, а затем считываем следующие 5 строк:
pd.read_csv("orders.csv",
skiprows=100,
nrows=5)
107524 | 2014-03-02 | Standard | KN-16705 | 47.76 | |
---|---|---|---|---|---|
0 | 107573 | 2014-12-12 | Standard | PB-19150 | 23.472 |
1 | 107594 | 2014-07-02 | Standard | EH-13945 | 79.560 |
2 | 107706 | 2014-02-14 | Second | ST-20530 | 16.176 |
3 | 107755 | 2014-02-07 | Standard | CK-12760 | 115.360 |
4 | 107769 | 2014-10-28 | Standard | BT-11395 | 257.980 |
pd.read_csv("orders.csv",
skiprows=100,
nrows=5,
#header=0,)
names=["id", "order_date", "ship_mode", "customer_id", "sales"])
id | order_date | ship_mode | customer_id | sales | |
---|---|---|---|---|---|
0 | 107524 | 2014-03-02 | Standard | KN-16705 | 47.760 |
1 | 107573 | 2014-12-12 | Standard | PB-19150 | 23.472 |
2 | 107594 | 2014-07-02 | Standard | EH-13945 | 79.560 |
3 | 107706 | 2014-02-14 | Second | ST-20530 | 16.176 |
4 | 107755 | 2014-02-07 | Standard | CK-12760 | 115.360 |
pd.read_csv("orders.csv",
skiprows=100,
nrows=5,
header=0,
names=["id", "order_date", "ship_mode", "customer_id", "sales"])
id | order_date | ship_mode | customer_id | sales | |
---|---|---|---|---|---|
0 | 107573 | 2014-12-12 | Standard | PB-19150 | 23.472 |
1 | 107594 | 2014-07-02 | Standard | EH-13945 | 79.560 |
2 | 107706 | 2014-02-14 | Second | ST-20530 | 16.176 |
3 | 107755 | 2014-02-07 | Standard | CK-12760 | 115.360 |
4 | 107769 | 2014-10-28 | Standard | BT-11395 | 257.980 |
!wget https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/stocks.xlsx
--2023-02-01 21:48:39-- https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/stocks.xlsx Распознаётся raw.githubusercontent.com (raw.githubusercontent.com)… 185.199.111.133, 185.199.110.133, 185.199.108.133, ... Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... соединение установлено. HTTP-запрос отправлен. Ожидание ответа… 200 OK Длина: 511809 (500K) [application/octet-stream] Сохранение в: «stocks.xlsx.2» stocks.xlsx.2 100%[===================>] 499,81K 1,65MB/s за 0,3s 2023-02-01 21:48:40 (1,65 MB/s) - «stocks.xlsx.2» сохранён [511809/511809]
Считываем файл Excel, считываем только данные первого рабочего листа о котировках акций (msft
в данном случае):
!pip install openpyxl
Requirement already satisfied: openpyxl in /Users/dm_fedorov/miniconda3/lib/python3.9/site-packages (3.1.0) Requirement already satisfied: et-xmlfile in /Users/dm_fedorov/miniconda3/lib/python3.9/site-packages (from openpyxl) (1.1.0)
import pandas as pd
df = pd.read_excel("stocks.xlsx")
df.head()
Date | Open | High | Low | Close | Volume | |
---|---|---|---|---|---|---|
0 | 2014-07-21 | 83.46 | 83.53 | 81.81 | 81.93 | 2359300 |
1 | 2014-07-18 | 83.30 | 83.40 | 82.52 | 83.35 | 4020800 |
2 | 2014-07-17 | 84.35 | 84.63 | 83.33 | 83.63 | 1974000 |
3 | 2014-07-16 | 83.77 | 84.91 | 83.66 | 84.91 | 1755600 |
4 | 2014-07-15 | 84.30 | 84.38 | 83.20 | 83.58 | 1874700 |
Считываем данные рабочего листа aapl
:
import pandas as pd
aapl = pd.read_excel("stocks.xlsx",
sheet_name='aapl')
aapl.head()
Date | Open | High | Low | Close | Volume | |
---|---|---|---|---|---|---|
0 | 2014-07-21 | 94.99 | 95.00 | 93.72 | 93.94 | 38887700 |
1 | 2014-07-18 | 93.62 | 94.74 | 93.02 | 94.43 | 49898600 |
2 | 2014-07-17 | 95.03 | 95.28 | 92.57 | 93.09 | 57152000 |
3 | 2014-07-16 | 96.97 | 97.10 | 94.74 | 94.78 | 53396300 |
4 | 2014-07-15 | 96.80 | 96.85 | 95.03 | 95.32 | 45477900 |
Параметры совпадают с read_csv
.
Сохраняем XLS-файл в рабочем листе Sheet1
:
df.to_excel("stocks2.xlsx")
Записываем, задав имя рабочего листа MSFT
:
df.to_excel("stocks_msft.xlsx",
sheet_name='MSFT')
Записываем несколько рабочих листов, требуется класс ExcelWriter
:
from pandas import ExcelWriter
with ExcelWriter("all_stocks.xlsx") as writer:
aapl.to_excel(writer, sheet_name='AAPL')
df.to_excel(writer, sheet_name='MSFT')
Записываем в xlsx
:
df.to_excel("msft2.xlsx")
Записываем данные Excel в JSON-файл:
df.head().to_json("stocks.json")
Теперь взглянем на JSON-файл:
import json
from pprint import pprint
with open('stocks.json') as data_file:
data = json.load(data_file)
pprint(data)
{'Close': {'0': 81.93, '1': 83.35, '2': 83.63, '3': 84.91, '4': 83.58}, 'Date': {'0': 1405900800000, '1': 1405641600000, '2': 1405555200000, '3': 1405468800000, '4': 1405382400000}, 'High': {'0': 83.53, '1': 83.4, '2': 84.63, '3': 84.91, '4': 84.38}, 'Low': {'0': 81.81, '1': 82.52, '2': 83.33, '3': 83.66, '4': 83.2}, 'Open': {'0': 83.46, '1': 83.3, '2': 84.35, '3': 83.77, '4': 84.3}, 'Volume': {'0': 2359300, '1': 4020800, '2': 1974000, '3': 1755600, '4': 1874700}}
!wget https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/stocks.json
--2023-02-01 21:49:00-- https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/stocks.json Распознаётся raw.githubusercontent.com (raw.githubusercontent.com)… 185.199.111.133, 185.199.110.133, 185.199.108.133, ... Подключение к raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... соединение установлено. HTTP-запрос отправлен. Ожидание ответа… 200 OK Длина: 403 [text/plain] Сохранение в: «stocks.json.1» stocks.json.1 100%[===================>] 403 --.-KB/s за 0s 2023-02-01 21:49:00 (24,0 MB/s) - «stocks.json.1» сохранён [403/403]
Считываем данные в формате JSON:
import json
from pprint import pprint
with open('stocks.json') as data_file:
data = json.load(data_file)
pprint(data)
{'Close': {'0': 81.93, '1': 83.35, '2': 83.63, '3': 84.91, '4': 83.58}, 'Date': {'0': 1405900800000, '1': 1405641600000, '2': 1405555200000, '3': 1405468800000, '4': 1405382400000}, 'High': {'0': 83.53, '1': 83.4, '2': 84.63, '3': 84.91, '4': 84.38}, 'Low': {'0': 81.81, '1': 82.52, '2': 83.33, '3': 83.66, '4': 83.2}, 'Open': {'0': 83.46, '1': 83.3, '2': 84.35, '3': 83.77, '4': 84.3}, 'Volume': {'0': 2359300, '1': 4020800, '2': 1974000, '3': 1755600, '4': 1874700}}
df_from_json = pd.read_json("stocks.json")
df_from_json.head()
Date | Open | High | Low | Close | Volume | |
---|---|---|---|---|---|---|
0 | 2014-07-21 | 83.46 | 83.53 | 81.81 | 81.93 | 2359300 |
1 | 2014-07-18 | 83.30 | 83.40 | 82.52 | 83.35 | 4020800 |
2 | 2014-07-17 | 84.35 | 84.63 | 83.33 | 83.63 | 1974000 |
3 | 2014-07-16 | 83.77 | 84.91 | 83.66 | 84.91 | 1755600 |
4 | 2014-07-15 | 84.30 | 84.38 | 83.20 | 83.58 | 1874700 |
Посмотрим на страницу Википедии:
url = 'https://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F'
Загрузим из нее все таблицы:
table_Rus = pd.read_html(url)
len(table_Rus)
45
Если нам нужны не все таблицы, только с определенным названием:
table_Rus = pd.read_html(url,
match='Рождаемость и смертность в России')
df_r = table_Rus[0]
df_r
Год | Рождаемость | Смертность | Прирост | |
---|---|---|---|---|
0 | 1995 | 1 363 806 | 2 203 811 | − 840 005 |
1 | 1999 | 1 214 689 | 2 144 316 | − 929 627 |
2 | 2000 | 1 266 800 | 2 225 332 | − 958 532 |
3 | 2001 | 1 311 604 | 2 254 856 | − 943 252 |
4 | 2002 | 1 396 967 | 2 332 272 | − 935 305 |
5 | 2003 | 1 477 301 | 2 365 826 | − 888 525 |
6 | 2004 | 1 502 477 | 2 295 402 | − 792 925 |
7 | 2005 | 1 457 376 | 2 303 935 | − 846 559 |
8 | 2006 | 1 479 637 | 2 166 703 | − 687 066 |
9 | 2007 | 1 610 122 | 2 080 445 | − 470 323 |
10 | 2008 | 1 713 947 | 2 075 954 | − 362 007 |
11 | 2009 | 1 761 687 | 2 010 543 | − 248 856 |
12 | 2010 | 1 788 948 | 2 028 516 | − 239 568 |
13 | 2011 | 1 796 629 | 1 925 720 | − 129 091 |
14 | 2012 | 1 902 084 | 1 906 335 | − 4251 |
15 | 2013 | 1 895 822 | 1 871 809 | + 24 013 |
16 | 2014 | 1 942 683 | 1 912 347 | + 30 336 |
17 | 2015 | 1 940 579 | 1 908 541 | + 32 038 |
18 | 2016 | 1 888 729 | 1 891 015 | − 2286 |
19 | 2017 | 1 690 307 | 1 826 125 | − 135 818 |
20 | 2018 | 1 604 344 | 1 828 910 | − 224 566 |
21 | Источник: Росстат[319] | Источник: Росстат[319] | Источник: Росстат[319] | Источник: Росстат[319] |
Считываем данные о котировках акций:
df = pd.read_excel("stocks.xlsx")
Записываем первые две строки в HTML:
df.head(2).to_html("stocks.html")
Смотрим HTML-файл в браузере:
import webbrowser
webbrowser.open("stocks.html")
True
orders = pd.read_csv("orders.csv")
orders.head()
id | order_date | ship_mode | customer_id | sales | |
---|---|---|---|---|---|
0 | 100006 | 2014-09-07 | Standard | DK-13375 | 377.970 |
1 | 100090 | 2014-07-08 | Standard | EB-13705 | 699.192 |
2 | 100293 | 2014-03-14 | Standard | NF-18475 | 91.056 |
3 | 100328 | 2014-01-28 | Standard | JC-15340 | 3.928 |
4 | 100363 | 2014-04-08 | Standard | JM-15655 | 21.376 |
customers = pd.read_csv("customers.csv")
customers.head()
id | name | segment | state | city | |
---|---|---|---|---|---|
0 | CG-12520 | Claire Gute | Consumer | Kentucky | Henderson |
1 | DV-13045 | Darrin Van Huff | Corporate | California | Los Angeles |
2 | SO-20335 | Sean O'Donnell | Consumer | Florida | Fort Lauderdale |
3 | BH-11710 | Brosina Hoffman | Consumer | California | Los Angeles |
4 | AA-10480 | Andrew Allen | Consumer | North Carolina | Concord |
#!wget https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/stocks.sqlite
import sqlite3
# создаем подключение
connection = sqlite3.connect("stocks.sqlite")
# .to_sql() создаст базу SQL для хранения датафрейма в указанной таблице
orders.to_sql("MY_DATA", connection, if_exists="replace")
# if_exists задает действие, которое нужно выполнить в том случае, если таблица уже существует
customers.to_sql("MY_DATA", connection, if_exists="replace")
# подтверждаем отправку данных в базу и закрываем подключение
connection.commit()
connection.close()
# подключаемся к файлу базы данных
connection = sqlite3.connect("stocks.sqlite")
Запрос всех записей в MY_DATA
возвращает датафрейм index_col
и задает столбец, который нужно сделать индексом датафрейма:
stocks = pd.io.sql.read_sql("SELECT * FROM MY_DATA;",
connection,
index_col='index')
# закрываем подключение
connection.close()
stocks.head()
id | name | segment | state | city | |
---|---|---|---|---|---|
index | |||||
0 | CG-12520 | Claire Gute | Consumer | Kentucky | Henderson |
1 | DV-13045 | Darrin Van Huff | Corporate | California | Los Angeles |
2 | SO-20335 | Sean O'Donnell | Consumer | Florida | Fort Lauderdale |
3 | BH-11710 | Brosina Hoffman | Consumer | California | Los Angeles |
4 | AA-10480 | Andrew Allen | Consumer | North Carolina | Concord |