4826 lines
191 KiB
Plaintext
4826 lines
191 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "ojlhGzdxhkwR"
|
||
},
|
||
"source": [
|
||
"## Pandas. Загрузка библиотек"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"id": "DqYWosnHhkwU"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pandas as pd # Загружаем библиотеку Pandas\n",
|
||
"import numpy as np # Загружаем библиотеку numpy"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"id": "vX8TZMleKHiw"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"data = pd.read_csv('wine_base.csv', index_col = 0) # С помощью метода read_csv загружаем файл wine_base.csv и записываем данные в data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "ggbR-UGu7wJZ",
|
||
"outputId": "735190d5-000c-479d-fb04-d7973bd58dd4"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>description</th>\n",
|
||
" <th>designation</th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>province</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th>variety</th>\n",
|
||
" <th>winery</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This tremendous 100% varietal wine hails from ...</td>\n",
|
||
" <td>Martha's Vineyard</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>235.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Napa Valley</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Heitz</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
|
||
" <td>Carodorum Selección Especial Reserva</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>110.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Bodega Carmen Rodríguez</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Mac Watson honors the memory of a wine once ma...</td>\n",
|
||
" <td>Special Selected Late Harvest</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Knights Valley</td>\n",
|
||
" <td>Sonoma</td>\n",
|
||
" <td>Sauvignon Blanc</td>\n",
|
||
" <td>Macauley</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This spent 20 months in 30% new French oak, an...</td>\n",
|
||
" <td>Reserve</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Ponzi</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>France</td>\n",
|
||
" <td>This is the top wine from La Bégude, named aft...</td>\n",
|
||
" <td>La Brûlade</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>66.0</td>\n",
|
||
" <td>Provence</td>\n",
|
||
" <td>Bandol</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Provence red blend</td>\n",
|
||
" <td>Domaine de la Bégude</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" country description \\\n",
|
||
"0 US This tremendous 100% varietal wine hails from ... \n",
|
||
"1 Spain Ripe aromas of fig, blackberry and cassis are ... \n",
|
||
"2 US Mac Watson honors the memory of a wine once ma... \n",
|
||
"3 US This spent 20 months in 30% new French oak, an... \n",
|
||
"4 France This is the top wine from La Bégude, named aft... \n",
|
||
"\n",
|
||
" designation points price province \\\n",
|
||
"0 Martha's Vineyard 96 235.0 California \n",
|
||
"1 Carodorum Selección Especial Reserva 96 110.0 Northern Spain \n",
|
||
"2 Special Selected Late Harvest 96 90.0 California \n",
|
||
"3 Reserve 96 65.0 Oregon \n",
|
||
"4 La Brûlade 95 66.0 Provence \n",
|
||
"\n",
|
||
" region_1 region_2 variety \\\n",
|
||
"0 Napa Valley Napa Cabernet Sauvignon \n",
|
||
"1 Toro NaN Tinta de Toro \n",
|
||
"2 Knights Valley Sonoma Sauvignon Blanc \n",
|
||
"3 Willamette Valley Willamette Valley Pinot Noir \n",
|
||
"4 Bandol NaN Provence red blend \n",
|
||
"\n",
|
||
" winery \n",
|
||
"0 Heitz \n",
|
||
"1 Bodega Carmen Rodríguez \n",
|
||
"2 Macauley \n",
|
||
"3 Ponzi \n",
|
||
"4 Domaine de la Bégude "
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"data.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"id": "_mybfuLlhkzU"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"## 1. Конкатенация\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 34
|
||
},
|
||
"id": "vUn3NnurhkzV",
|
||
"outputId": "11da5650-2592-40f3-c0d6-59a503352985"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"[4, 5, 6, 7, 234, 23, 0, 1, 2, 3, 4, 5, 6, 7, 234, 23, 0, 1, 2, 3, 0, 1, 2, 3]"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"a = [0, 1, 2, 3] # Создаем список а\n",
|
||
"b = [4, 5, 6, 7, 234, 23] # Создаем список b\n",
|
||
"b + a + b + a + a # Делаем конкатенацию (объединение) списков"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {
|
||
"id": "DzVWtFnXhkzX"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"data_1 = data[0:15].copy() # Берем первые 15 строк из data и делаем их копию в data_1\n",
|
||
"data_2 = data[15:30].copy() # Берем строки с 15 по 30 из data и делаем их копию в data_2"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "T2Nq4UnUhkza",
|
||
"outputId": "0d7c713f-8eae-4e25-878c-c7e1cf26f8d5"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>description</th>\n",
|
||
" <th>designation</th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>province</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th>variety</th>\n",
|
||
" <th>winery</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>15</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>First made in 2006, this succulent luscious Ch...</td>\n",
|
||
" <td>Sigrid</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Chardonnay</td>\n",
|
||
" <td>Bergström</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This blockbuster, powerhouse of a wine suggest...</td>\n",
|
||
" <td>Rainin Vineyard</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>325.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Diamond Mountain District</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Hall</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>17</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Nicely oaked blackberry, licorice, vanilla and...</td>\n",
|
||
" <td>6 Años Reserva Premium</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>80.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Ribera del Duero</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tempranillo</td>\n",
|
||
" <td>Valduero</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>18</th>\n",
|
||
" <td>France</td>\n",
|
||
" <td>Coming from a seven-acre vineyard named after ...</td>\n",
|
||
" <td>Le Pigeonnier</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>290.0</td>\n",
|
||
" <td>Southwest France</td>\n",
|
||
" <td>Cahors</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Malbec</td>\n",
|
||
" <td>Château Lagrézette</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>19</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This fresh and lively medium-bodied wine is be...</td>\n",
|
||
" <td>Gap's Crown Vineyard</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>75.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Sonoma Coast</td>\n",
|
||
" <td>Sonoma</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Gary Farrell</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" country description \\\n",
|
||
"15 US First made in 2006, this succulent luscious Ch... \n",
|
||
"16 US This blockbuster, powerhouse of a wine suggest... \n",
|
||
"17 Spain Nicely oaked blackberry, licorice, vanilla and... \n",
|
||
"18 France Coming from a seven-acre vineyard named after ... \n",
|
||
"19 US This fresh and lively medium-bodied wine is be... \n",
|
||
"\n",
|
||
" designation points price province \\\n",
|
||
"15 Sigrid 95 90.0 Oregon \n",
|
||
"16 Rainin Vineyard 95 325.0 California \n",
|
||
"17 6 Años Reserva Premium 95 80.0 Northern Spain \n",
|
||
"18 Le Pigeonnier 95 290.0 Southwest France \n",
|
||
"19 Gap's Crown Vineyard 95 75.0 California \n",
|
||
"\n",
|
||
" region_1 region_2 variety \\\n",
|
||
"15 Willamette Valley Willamette Valley Chardonnay \n",
|
||
"16 Diamond Mountain District Napa Cabernet Sauvignon \n",
|
||
"17 Ribera del Duero NaN Tempranillo \n",
|
||
"18 Cahors NaN Malbec \n",
|
||
"19 Sonoma Coast Sonoma Pinot Noir \n",
|
||
"\n",
|
||
" winery \n",
|
||
"15 Bergström \n",
|
||
"16 Hall \n",
|
||
"17 Valduero \n",
|
||
"18 Château Lagrézette \n",
|
||
"19 Gary Farrell "
|
||
]
|
||
},
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"data_2.head() # Выводим первые 5 строк data_2"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 1000
|
||
},
|
||
"id": "hQn7iScFhkzb",
|
||
"outputId": "1dfa87c8-4278-49f5-c1d4-8507d2d13667"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>description</th>\n",
|
||
" <th>designation</th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>province</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th>variety</th>\n",
|
||
" <th>winery</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This tremendous 100% varietal wine hails from ...</td>\n",
|
||
" <td>Martha's Vineyard</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>235.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Napa Valley</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Heitz</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
|
||
" <td>Carodorum Selección Especial Reserva</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>110.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Bodega Carmen Rodríguez</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Mac Watson honors the memory of a wine once ma...</td>\n",
|
||
" <td>Special Selected Late Harvest</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Knights Valley</td>\n",
|
||
" <td>Sonoma</td>\n",
|
||
" <td>Sauvignon Blanc</td>\n",
|
||
" <td>Macauley</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This spent 20 months in 30% new French oak, an...</td>\n",
|
||
" <td>Reserve</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Ponzi</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>France</td>\n",
|
||
" <td>This is the top wine from La Bégude, named aft...</td>\n",
|
||
" <td>La Brûlade</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>66.0</td>\n",
|
||
" <td>Provence</td>\n",
|
||
" <td>Bandol</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Provence red blend</td>\n",
|
||
" <td>Domaine de la Bégude</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Deep, dense and pure from the opening bell, th...</td>\n",
|
||
" <td>Numanthia</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>73.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Numanthia</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Slightly gritty black-fruit aromas include a s...</td>\n",
|
||
" <td>San Román</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Maurodos</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Lush cedary black-fruit aromas are luxe and of...</td>\n",
|
||
" <td>Carodorum Único Crianza</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>110.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Bodega Carmen Rodríguez</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This re-named vineyard was formerly bottled as...</td>\n",
|
||
" <td>Silice</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Chehalem Mountains</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Bergström</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>9</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>The producer sources from two blocks of the vi...</td>\n",
|
||
" <td>Gap's Crown Vineyard</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Sonoma Coast</td>\n",
|
||
" <td>Sonoma</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Blue Farm</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>10</th>\n",
|
||
" <td>Italy</td>\n",
|
||
" <td>Elegance, complexity and structure come togeth...</td>\n",
|
||
" <td>Ronco della Chiesa</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>80.0</td>\n",
|
||
" <td>Northeastern Italy</td>\n",
|
||
" <td>Collio</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Friulano</td>\n",
|
||
" <td>Borgo del Tiglio</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>11</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>From 18-year-old vines, this supple well-balan...</td>\n",
|
||
" <td>Estate Vineyard Wadensvil Block</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>48.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Ribbon Ridge</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Patricia Green Cellars</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>12</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>A standout even in this terrific lineup of 201...</td>\n",
|
||
" <td>Weber Vineyard</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>48.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Dundee Hills</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Patricia Green Cellars</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13</th>\n",
|
||
" <td>France</td>\n",
|
||
" <td>This wine is in peak condition. The tannins an...</td>\n",
|
||
" <td>Château Montus Prestige</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" <td>Southwest France</td>\n",
|
||
" <td>Madiran</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tannat</td>\n",
|
||
" <td>Vignobles Brumont</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>14</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>With its sophisticated mix of mineral, acid an...</td>\n",
|
||
" <td>Grace Vineyard</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>185.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Dundee Hills</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Domaine Serene</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>15</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>First made in 2006, this succulent luscious Ch...</td>\n",
|
||
" <td>Sigrid</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Chardonnay</td>\n",
|
||
" <td>Bergström</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This blockbuster, powerhouse of a wine suggest...</td>\n",
|
||
" <td>Rainin Vineyard</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>325.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Diamond Mountain District</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Hall</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>17</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Nicely oaked blackberry, licorice, vanilla and...</td>\n",
|
||
" <td>6 Años Reserva Premium</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>80.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Ribera del Duero</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tempranillo</td>\n",
|
||
" <td>Valduero</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>18</th>\n",
|
||
" <td>France</td>\n",
|
||
" <td>Coming from a seven-acre vineyard named after ...</td>\n",
|
||
" <td>Le Pigeonnier</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>290.0</td>\n",
|
||
" <td>Southwest France</td>\n",
|
||
" <td>Cahors</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Malbec</td>\n",
|
||
" <td>Château Lagrézette</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>19</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This fresh and lively medium-bodied wine is be...</td>\n",
|
||
" <td>Gap's Crown Vineyard</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>75.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Sonoma Coast</td>\n",
|
||
" <td>Sonoma</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Gary Farrell</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>20</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Heitz has made this stellar rosé from the rare...</td>\n",
|
||
" <td>Grignolino</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>24.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Napa Valley</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Rosé</td>\n",
|
||
" <td>Heitz</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Alluring, complex and powerful aromas of grill...</td>\n",
|
||
" <td>Prado Enea Gran Reserva</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>79.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Rioja</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tempranillo Blend</td>\n",
|
||
" <td>Muga</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>22</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Tarry blackberry and cheesy oak aromas are app...</td>\n",
|
||
" <td>Termanthia</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>220.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Numanthia</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>23</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>The apogee of this ambitious winery's white wi...</td>\n",
|
||
" <td>Giallo Solare</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Edna Valley</td>\n",
|
||
" <td>Central Coast</td>\n",
|
||
" <td>Chardonnay</td>\n",
|
||
" <td>Center of Effort</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>24</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>San Jose-based producer Adam Comartin heads 1,...</td>\n",
|
||
" <td>R-Bar-R Ranch</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>45.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Santa Cruz Mountains</td>\n",
|
||
" <td>Central Coast</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Comartin</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>25</th>\n",
|
||
" <td>New Zealand</td>\n",
|
||
" <td>Yields were down in 2015, but intensity is up,...</td>\n",
|
||
" <td>Maté's Vineyard</td>\n",
|
||
" <td>94</td>\n",
|
||
" <td>57.0</td>\n",
|
||
" <td>Kumeu</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Chardonnay</td>\n",
|
||
" <td>Kumeu River</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>26</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Bergström has made a Shea designate since 2003...</td>\n",
|
||
" <td>Shea Vineyard</td>\n",
|
||
" <td>94</td>\n",
|
||
" <td>62.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Bergström</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>27</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Focused and dense, this intense wine captures ...</td>\n",
|
||
" <td>Abetina</td>\n",
|
||
" <td>94</td>\n",
|
||
" <td>105.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Ponzi</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>28</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Cranberry, baked rhubarb, anise and crushed sl...</td>\n",
|
||
" <td>Garys' Vineyard</td>\n",
|
||
" <td>94</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Santa Lucia Highlands</td>\n",
|
||
" <td>Central Coast</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Roar</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>29</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This standout Rocks District wine brings earth...</td>\n",
|
||
" <td>The Funk Estate</td>\n",
|
||
" <td>94</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" <td>Washington</td>\n",
|
||
" <td>Walla Walla Valley (WA)</td>\n",
|
||
" <td>Columbia Valley</td>\n",
|
||
" <td>Syrah</td>\n",
|
||
" <td>Saviah</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" country description \\\n",
|
||
"0 US This tremendous 100% varietal wine hails from ... \n",
|
||
"1 Spain Ripe aromas of fig, blackberry and cassis are ... \n",
|
||
"2 US Mac Watson honors the memory of a wine once ma... \n",
|
||
"3 US This spent 20 months in 30% new French oak, an... \n",
|
||
"4 France This is the top wine from La Bégude, named aft... \n",
|
||
"5 Spain Deep, dense and pure from the opening bell, th... \n",
|
||
"6 Spain Slightly gritty black-fruit aromas include a s... \n",
|
||
"7 Spain Lush cedary black-fruit aromas are luxe and of... \n",
|
||
"8 US This re-named vineyard was formerly bottled as... \n",
|
||
"9 US The producer sources from two blocks of the vi... \n",
|
||
"10 Italy Elegance, complexity and structure come togeth... \n",
|
||
"11 US From 18-year-old vines, this supple well-balan... \n",
|
||
"12 US A standout even in this terrific lineup of 201... \n",
|
||
"13 France This wine is in peak condition. The tannins an... \n",
|
||
"14 US With its sophisticated mix of mineral, acid an... \n",
|
||
"15 US First made in 2006, this succulent luscious Ch... \n",
|
||
"16 US This blockbuster, powerhouse of a wine suggest... \n",
|
||
"17 Spain Nicely oaked blackberry, licorice, vanilla and... \n",
|
||
"18 France Coming from a seven-acre vineyard named after ... \n",
|
||
"19 US This fresh and lively medium-bodied wine is be... \n",
|
||
"20 US Heitz has made this stellar rosé from the rare... \n",
|
||
"21 Spain Alluring, complex and powerful aromas of grill... \n",
|
||
"22 Spain Tarry blackberry and cheesy oak aromas are app... \n",
|
||
"23 US The apogee of this ambitious winery's white wi... \n",
|
||
"24 US San Jose-based producer Adam Comartin heads 1,... \n",
|
||
"25 New Zealand Yields were down in 2015, but intensity is up,... \n",
|
||
"26 US Bergström has made a Shea designate since 2003... \n",
|
||
"27 US Focused and dense, this intense wine captures ... \n",
|
||
"28 US Cranberry, baked rhubarb, anise and crushed sl... \n",
|
||
"29 US This standout Rocks District wine brings earth... \n",
|
||
"\n",
|
||
" designation points price province \\\n",
|
||
"0 Martha's Vineyard 96 235.0 California \n",
|
||
"1 Carodorum Selección Especial Reserva 96 110.0 Northern Spain \n",
|
||
"2 Special Selected Late Harvest 96 90.0 California \n",
|
||
"3 Reserve 96 65.0 Oregon \n",
|
||
"4 La Brûlade 95 66.0 Provence \n",
|
||
"5 Numanthia 95 73.0 Northern Spain \n",
|
||
"6 San Román 95 65.0 Northern Spain \n",
|
||
"7 Carodorum Único Crianza 95 110.0 Northern Spain \n",
|
||
"8 Silice 95 65.0 Oregon \n",
|
||
"9 Gap's Crown Vineyard 95 60.0 California \n",
|
||
"10 Ronco della Chiesa 95 80.0 Northeastern Italy \n",
|
||
"11 Estate Vineyard Wadensvil Block 95 48.0 Oregon \n",
|
||
"12 Weber Vineyard 95 48.0 Oregon \n",
|
||
"13 Château Montus Prestige 95 90.0 Southwest France \n",
|
||
"14 Grace Vineyard 95 185.0 Oregon \n",
|
||
"15 Sigrid 95 90.0 Oregon \n",
|
||
"16 Rainin Vineyard 95 325.0 California \n",
|
||
"17 6 Años Reserva Premium 95 80.0 Northern Spain \n",
|
||
"18 Le Pigeonnier 95 290.0 Southwest France \n",
|
||
"19 Gap's Crown Vineyard 95 75.0 California \n",
|
||
"20 Grignolino 95 24.0 California \n",
|
||
"21 Prado Enea Gran Reserva 95 79.0 Northern Spain \n",
|
||
"22 Termanthia 95 220.0 Northern Spain \n",
|
||
"23 Giallo Solare 95 60.0 California \n",
|
||
"24 R-Bar-R Ranch 95 45.0 California \n",
|
||
"25 Maté's Vineyard 94 57.0 Kumeu \n",
|
||
"26 Shea Vineyard 94 62.0 Oregon \n",
|
||
"27 Abetina 94 105.0 Oregon \n",
|
||
"28 Garys' Vineyard 94 60.0 California \n",
|
||
"29 The Funk Estate 94 60.0 Washington \n",
|
||
"\n",
|
||
" region_1 region_2 variety \\\n",
|
||
"0 Napa Valley Napa Cabernet Sauvignon \n",
|
||
"1 Toro NaN Tinta de Toro \n",
|
||
"2 Knights Valley Sonoma Sauvignon Blanc \n",
|
||
"3 Willamette Valley Willamette Valley Pinot Noir \n",
|
||
"4 Bandol NaN Provence red blend \n",
|
||
"5 Toro NaN Tinta de Toro \n",
|
||
"6 Toro NaN Tinta de Toro \n",
|
||
"7 Toro NaN Tinta de Toro \n",
|
||
"8 Chehalem Mountains Willamette Valley Pinot Noir \n",
|
||
"9 Sonoma Coast Sonoma Pinot Noir \n",
|
||
"10 Collio NaN Friulano \n",
|
||
"11 Ribbon Ridge Willamette Valley Pinot Noir \n",
|
||
"12 Dundee Hills Willamette Valley Pinot Noir \n",
|
||
"13 Madiran NaN Tannat \n",
|
||
"14 Dundee Hills Willamette Valley Pinot Noir \n",
|
||
"15 Willamette Valley Willamette Valley Chardonnay \n",
|
||
"16 Diamond Mountain District Napa Cabernet Sauvignon \n",
|
||
"17 Ribera del Duero NaN Tempranillo \n",
|
||
"18 Cahors NaN Malbec \n",
|
||
"19 Sonoma Coast Sonoma Pinot Noir \n",
|
||
"20 Napa Valley Napa Rosé \n",
|
||
"21 Rioja NaN Tempranillo Blend \n",
|
||
"22 Toro NaN Tinta de Toro \n",
|
||
"23 Edna Valley Central Coast Chardonnay \n",
|
||
"24 Santa Cruz Mountains Central Coast Pinot Noir \n",
|
||
"25 NaN NaN Chardonnay \n",
|
||
"26 Willamette Valley NaN Pinot Noir \n",
|
||
"27 Willamette Valley Willamette Valley Pinot Noir \n",
|
||
"28 Santa Lucia Highlands Central Coast Pinot Noir \n",
|
||
"29 Walla Walla Valley (WA) Columbia Valley Syrah \n",
|
||
"\n",
|
||
" winery \n",
|
||
"0 Heitz \n",
|
||
"1 Bodega Carmen Rodríguez \n",
|
||
"2 Macauley \n",
|
||
"3 Ponzi \n",
|
||
"4 Domaine de la Bégude \n",
|
||
"5 Numanthia \n",
|
||
"6 Maurodos \n",
|
||
"7 Bodega Carmen Rodríguez \n",
|
||
"8 Bergström \n",
|
||
"9 Blue Farm \n",
|
||
"10 Borgo del Tiglio \n",
|
||
"11 Patricia Green Cellars \n",
|
||
"12 Patricia Green Cellars \n",
|
||
"13 Vignobles Brumont \n",
|
||
"14 Domaine Serene \n",
|
||
"15 Bergström \n",
|
||
"16 Hall \n",
|
||
"17 Valduero \n",
|
||
"18 Château Lagrézette \n",
|
||
"19 Gary Farrell \n",
|
||
"20 Heitz \n",
|
||
"21 Muga \n",
|
||
"22 Numanthia \n",
|
||
"23 Center of Effort \n",
|
||
"24 Comartin \n",
|
||
"25 Kumeu River \n",
|
||
"26 Bergström \n",
|
||
"27 Ponzi \n",
|
||
"28 Roar \n",
|
||
"29 Saviah "
|
||
]
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_concat = pd.concat([data_1, data_2]) # Объединяем два датафрейма\n",
|
||
"df_concat # Отображаем объединенный датафрейм"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "Y36JPmmyhkzd",
|
||
"outputId": "3c39bb6e-2353-4360-a4fa-c9dc0af22d51"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>description</th>\n",
|
||
" <th>designation</th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>province</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th>variety</th>\n",
|
||
" <th>winery</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This tremendous 100% varietal wine hails from ...</td>\n",
|
||
" <td>Martha's Vineyard</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>235.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Napa Valley</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Heitz</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
|
||
" <td>Carodorum Selección Especial Reserva</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>110.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Bodega Carmen Rodríguez</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Mac Watson honors the memory of a wine once ma...</td>\n",
|
||
" <td>Special Selected Late Harvest</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Knights Valley</td>\n",
|
||
" <td>Sonoma</td>\n",
|
||
" <td>Sauvignon Blanc</td>\n",
|
||
" <td>Macauley</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This spent 20 months in 30% new French oak, an...</td>\n",
|
||
" <td>Reserve</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Ponzi</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>France</td>\n",
|
||
" <td>This is the top wine from La Bégude, named aft...</td>\n",
|
||
" <td>La Brûlade</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>66.0</td>\n",
|
||
" <td>Provence</td>\n",
|
||
" <td>Bandol</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Provence red blend</td>\n",
|
||
" <td>Domaine de la Bégude</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" country description \\\n",
|
||
"0 US This tremendous 100% varietal wine hails from ... \n",
|
||
"1 Spain Ripe aromas of fig, blackberry and cassis are ... \n",
|
||
"2 US Mac Watson honors the memory of a wine once ma... \n",
|
||
"3 US This spent 20 months in 30% new French oak, an... \n",
|
||
"4 France This is the top wine from La Bégude, named aft... \n",
|
||
"\n",
|
||
" designation points price province \\\n",
|
||
"0 Martha's Vineyard 96 235.0 California \n",
|
||
"1 Carodorum Selección Especial Reserva 96 110.0 Northern Spain \n",
|
||
"2 Special Selected Late Harvest 96 90.0 California \n",
|
||
"3 Reserve 96 65.0 Oregon \n",
|
||
"4 La Brûlade 95 66.0 Provence \n",
|
||
"\n",
|
||
" region_1 region_2 variety \\\n",
|
||
"0 Napa Valley Napa Cabernet Sauvignon \n",
|
||
"1 Toro NaN Tinta de Toro \n",
|
||
"2 Knights Valley Sonoma Sauvignon Blanc \n",
|
||
"3 Willamette Valley Willamette Valley Pinot Noir \n",
|
||
"4 Bandol NaN Provence red blend \n",
|
||
"\n",
|
||
" winery \n",
|
||
"0 Heitz \n",
|
||
"1 Bodega Carmen Rodríguez \n",
|
||
"2 Macauley \n",
|
||
"3 Ponzi \n",
|
||
"4 Domaine de la Bégude "
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"data_1.head() # Выводим первые 5 строк data_1"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 111
|
||
},
|
||
"id": "2H9dAxpQhkze",
|
||
"outputId": "06098996-d31b-4409-ddfa-773a3fa8bef2"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>description</th>\n",
|
||
" <th>designation</th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>province</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th>variety</th>\n",
|
||
" <th>winery</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Keras</td>\n",
|
||
" <td>Martha's Vineyard</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>235.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Napa Valley</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Heitz</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
|
||
" <td>Carodorum Selección Especial Reserva</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>110.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Bodega Carmen Rodríguez</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" country description \\\n",
|
||
"0 US Keras \n",
|
||
"1 Spain Ripe aromas of fig, blackberry and cassis are ... \n",
|
||
"\n",
|
||
" designation points price province \\\n",
|
||
"0 Martha's Vineyard 96 235.0 California \n",
|
||
"1 Carodorum Selección Especial Reserva 96 110.0 Northern Spain \n",
|
||
"\n",
|
||
" region_1 region_2 variety winery \n",
|
||
"0 Napa Valley Napa Cabernet Sauvignon Heitz \n",
|
||
"1 Toro NaN Tinta de Toro Bodega Carmen Rodríguez "
|
||
]
|
||
},
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"data_1.iloc[0,1] = 'Keras' # Изменяем значение в ячейке data_1\n",
|
||
"data_1.head(2) # Выводим на экран 2 первые строки data_1"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 111
|
||
},
|
||
"id": "z_98pMQ9MHFm",
|
||
"outputId": "671b4223-d59a-4230-c0d2-7b3e33dc1ff4"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>description</th>\n",
|
||
" <th>designation</th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>province</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th>variety</th>\n",
|
||
" <th>winery</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This tremendous 100% varietal wine hails from ...</td>\n",
|
||
" <td>Martha's Vineyard</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>235.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Napa Valley</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Heitz</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
|
||
" <td>Carodorum Selección Especial Reserva</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>110.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Bodega Carmen Rodríguez</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" country description \\\n",
|
||
"0 US This tremendous 100% varietal wine hails from ... \n",
|
||
"1 Spain Ripe aromas of fig, blackberry and cassis are ... \n",
|
||
"\n",
|
||
" designation points price province \\\n",
|
||
"0 Martha's Vineyard 96 235.0 California \n",
|
||
"1 Carodorum Selección Especial Reserva 96 110.0 Northern Spain \n",
|
||
"\n",
|
||
" region_1 region_2 variety winery \n",
|
||
"0 Napa Valley Napa Cabernet Sauvignon Heitz \n",
|
||
"1 Toro NaN Tinta de Toro Bodega Carmen Rodríguez "
|
||
]
|
||
},
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_concat.head(2) # Выводим на экран 2 первые строки df_concat"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {
|
||
"id": "0Chntu25WIF2"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"## 2. Добавление столбцов и строк"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 173
|
||
},
|
||
"id": "niLdtd4xWMb0",
|
||
"outputId": "48bda55e-a9ef-4026-fbd1-70f9021f2b84"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>A</th>\n",
|
||
" <th>B</th>\n",
|
||
" <th>C</th>\n",
|
||
" <th>D</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>9</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>12</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>16</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" A B C D\n",
|
||
"0 1 2 3 4\n",
|
||
"1 5 6 7 8\n",
|
||
"2 9 10 11 12\n",
|
||
"3 13 14 15 16"
|
||
]
|
||
},
|
||
"execution_count": 14,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"columns = ['A', 'B', 'C', 'D'] # Создаем список с названием столбцов\n",
|
||
"values = [[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]] # Создаем список со значениями\n",
|
||
"df_for_add = pd.DataFrame(values, columns=columns) # Создаем датафрейм из сформированных значений\n",
|
||
"df_for_add # Выводим на экран датафрейм df_for_add"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 173
|
||
},
|
||
"id": "NGK40s7PWhcK",
|
||
"outputId": "2507bf8f-a895-4adf-e43c-a245664eac7d"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>A</th>\n",
|
||
" <th>B</th>\n",
|
||
" <th>C</th>\n",
|
||
" <th>D</th>\n",
|
||
" <th>E</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>18</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>9</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>19</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>20</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" A B C D E\n",
|
||
"0 1 2 3 4 17\n",
|
||
"1 5 6 7 8 18\n",
|
||
"2 9 10 11 12 19\n",
|
||
"3 13 14 15 16 20"
|
||
]
|
||
},
|
||
"execution_count": 15,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_for_add['E'] = [17,18,19,20] # Добавляем столбец\n",
|
||
"df_for_add # Выводим на экран датафрейм df_for_add"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 173
|
||
},
|
||
"id": "WVt6bsnC9l90",
|
||
"outputId": "29cb192e-bb63-4128-b191-7ff683162b54"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>A</th>\n",
|
||
" <th>B</th>\n",
|
||
" <th>C</th>\n",
|
||
" <th>D</th>\n",
|
||
" <th>E</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>9</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>27</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" A B C D E\n",
|
||
"0 1 2 3 4 17\n",
|
||
"1 5 6 7 8 17\n",
|
||
"2 9 10 11 12 17\n",
|
||
"3 13 14 15 16 27"
|
||
]
|
||
},
|
||
"execution_count": 16,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_for_add['E'] = [17,17,17,27] # Добавляем столбец\n",
|
||
"df_for_add # Выводим на экран датафрейм df_for_add"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "T2UEW9MfW0pj",
|
||
"outputId": "de7a0376-366f-4621-f8fc-5828e76ac008"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>A</th>\n",
|
||
" <th>B</th>\n",
|
||
" <th>C</th>\n",
|
||
" <th>D</th>\n",
|
||
" <th>E</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>9</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>27</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" A B C D E\n",
|
||
"0 1 2 3 4 17\n",
|
||
"1 5 6 7 8 17\n",
|
||
"2 9 10 11 12 17\n",
|
||
"3 13 14 15 16 27\n",
|
||
"4 1 2 3 4 5"
|
||
]
|
||
},
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_for_add.loc[4] = [1,2,3,4,5] # Добавляем строку \n",
|
||
"df_for_add # Выводим на экран датафрейм df_for_add"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "ZFRI_F9L-CGs",
|
||
"outputId": "57289a3c-a004-4503-f353-5a3bc2cefb19"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>A</th>\n",
|
||
" <th>B</th>\n",
|
||
" <th>C</th>\n",
|
||
" <th>D</th>\n",
|
||
" <th>E</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>9</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>12</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>27</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" A B C D E\n",
|
||
"0 1 2 3 4 17\n",
|
||
"1 5 6 7 8 17\n",
|
||
"2 9 10 11 12 17\n",
|
||
"3 13 14 15 16 27\n",
|
||
"4 1 2 3 4 5\n",
|
||
"8 1 2 3 4 5"
|
||
]
|
||
},
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_for_add.loc[8] = [1,2,3,4,5] # Добавляем строку \n",
|
||
"df_for_add # Выводим на экран датафрейм df_for_add"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"metadata": {
|
||
"id": "Af1_T2N8jAfF"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"## 3. Groupby"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "3QFEHZdYjAew",
|
||
"outputId": "c51e1577-23d8-4707-cf6c-42fc94d0fd86"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>description</th>\n",
|
||
" <th>designation</th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>province</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th>variety</th>\n",
|
||
" <th>winery</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This tremendous 100% varietal wine hails from ...</td>\n",
|
||
" <td>Martha's Vineyard</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>235.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Napa Valley</td>\n",
|
||
" <td>Napa</td>\n",
|
||
" <td>Cabernet Sauvignon</td>\n",
|
||
" <td>Heitz</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Spain</td>\n",
|
||
" <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
|
||
" <td>Carodorum Selección Especial Reserva</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>110.0</td>\n",
|
||
" <td>Northern Spain</td>\n",
|
||
" <td>Toro</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Tinta de Toro</td>\n",
|
||
" <td>Bodega Carmen Rodríguez</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>Mac Watson honors the memory of a wine once ma...</td>\n",
|
||
" <td>Special Selected Late Harvest</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" <td>California</td>\n",
|
||
" <td>Knights Valley</td>\n",
|
||
" <td>Sonoma</td>\n",
|
||
" <td>Sauvignon Blanc</td>\n",
|
||
" <td>Macauley</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>US</td>\n",
|
||
" <td>This spent 20 months in 30% new French oak, an...</td>\n",
|
||
" <td>Reserve</td>\n",
|
||
" <td>96</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>Oregon</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Willamette Valley</td>\n",
|
||
" <td>Pinot Noir</td>\n",
|
||
" <td>Ponzi</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>France</td>\n",
|
||
" <td>This is the top wine from La Bégude, named aft...</td>\n",
|
||
" <td>La Brûlade</td>\n",
|
||
" <td>95</td>\n",
|
||
" <td>66.0</td>\n",
|
||
" <td>Provence</td>\n",
|
||
" <td>Bandol</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Provence red blend</td>\n",
|
||
" <td>Domaine de la Bégude</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" country description \\\n",
|
||
"0 US This tremendous 100% varietal wine hails from ... \n",
|
||
"1 Spain Ripe aromas of fig, blackberry and cassis are ... \n",
|
||
"2 US Mac Watson honors the memory of a wine once ma... \n",
|
||
"3 US This spent 20 months in 30% new French oak, an... \n",
|
||
"4 France This is the top wine from La Bégude, named aft... \n",
|
||
"\n",
|
||
" designation points price province \\\n",
|
||
"0 Martha's Vineyard 96 235.0 California \n",
|
||
"1 Carodorum Selección Especial Reserva 96 110.0 Northern Spain \n",
|
||
"2 Special Selected Late Harvest 96 90.0 California \n",
|
||
"3 Reserve 96 65.0 Oregon \n",
|
||
"4 La Brûlade 95 66.0 Provence \n",
|
||
"\n",
|
||
" region_1 region_2 variety \\\n",
|
||
"0 Napa Valley Napa Cabernet Sauvignon \n",
|
||
"1 Toro NaN Tinta de Toro \n",
|
||
"2 Knights Valley Sonoma Sauvignon Blanc \n",
|
||
"3 Willamette Valley Willamette Valley Pinot Noir \n",
|
||
"4 Bandol NaN Provence red blend \n",
|
||
"\n",
|
||
" winery \n",
|
||
"0 Heitz \n",
|
||
"1 Bodega Carmen Rodríguez \n",
|
||
"2 Macauley \n",
|
||
"3 Ponzi \n",
|
||
"4 Domaine de la Bégude "
|
||
]
|
||
},
|
||
"execution_count": 20,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"data.head() # Выведем первые 5 строк data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "ItPspZfLjAfL"
|
||
},
|
||
"source": [
|
||
"Groupby - это очень важный и широко используемый метод. Позволяет делать группировку данных по какому-либо столбцу. \n",
|
||
"\n",
|
||
"Пример:\n",
|
||
"* посчитать средние баллы и цену в разрезе по странам и провинциям"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "UM89p_pcjAfO",
|
||
"outputId": "dee3be1a-1cf3-44cb-8af2-4390811c9cce"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/wx/b8w5bvpx5hjdgyvqlfp38x940000gn/T/ipykernel_15726/32687945.py:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
|
||
" df_mean = data.groupby(['country']).mean() # Группируем данные по странам и считаем среднее значение (считается для числовых столбцов)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>country</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>Albania</th>\n",
|
||
" <td>88.000000</td>\n",
|
||
" <td>20.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Argentina</th>\n",
|
||
" <td>85.996093</td>\n",
|
||
" <td>20.794881</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Australia</th>\n",
|
||
" <td>87.892475</td>\n",
|
||
" <td>31.258480</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Austria</th>\n",
|
||
" <td>89.276742</td>\n",
|
||
" <td>31.192106</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Bosnia and Herzegovina</th>\n",
|
||
" <td>84.750000</td>\n",
|
||
" <td>12.750000</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" points price\n",
|
||
"country \n",
|
||
"Albania 88.000000 20.000000\n",
|
||
"Argentina 85.996093 20.794881\n",
|
||
"Australia 87.892475 31.258480\n",
|
||
"Austria 89.276742 31.192106\n",
|
||
"Bosnia and Herzegovina 84.750000 12.750000"
|
||
]
|
||
},
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_mean = data.groupby(['country']).mean() # Группируем данные по странам и считаем среднее значение (считается для числовых столбцов)\n",
|
||
"df_mean.head() # Выводим первые 5 строк df_mean"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 269
|
||
},
|
||
"id": "xLhe1562suR1",
|
||
"outputId": "26e6853b-cb62-464f-9f4e-48f912c84429"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/wx/b8w5bvpx5hjdgyvqlfp38x940000gn/T/ipykernel_15726/30053901.py:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n",
|
||
" df_max = data.groupby('country')['points','price'].max() # Группируем данные по странам и считаем максимальное значение\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>country</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>Albania</th>\n",
|
||
" <td>88</td>\n",
|
||
" <td>20.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Argentina</th>\n",
|
||
" <td>97</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Australia</th>\n",
|
||
" <td>100</td>\n",
|
||
" <td>850.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Austria</th>\n",
|
||
" <td>98</td>\n",
|
||
" <td>1100.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Bosnia and Herzegovina</th>\n",
|
||
" <td>88</td>\n",
|
||
" <td>13.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" points price\n",
|
||
"country \n",
|
||
"Albania 88 20.0\n",
|
||
"Argentina 97 250.0\n",
|
||
"Australia 100 850.0\n",
|
||
"Austria 98 1100.0\n",
|
||
"Bosnia and Herzegovina 88 13.0"
|
||
]
|
||
},
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df_max = data.groupby('country')['points','price'].max() # Группируем данные по странам и считаем максимальное значение\n",
|
||
"df_max.head() # # Выводим первые 5 строк df_max"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 390
|
||
},
|
||
"id": "6RifUrsujAfY",
|
||
"outputId": "ca2d153c-a2bc-4491-b6cd-c5ac1fa1f588"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>country</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>England</th>\n",
|
||
" <td>92.888889</td>\n",
|
||
" <td>47.500000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Austria</th>\n",
|
||
" <td>89.276742</td>\n",
|
||
" <td>31.192106</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>France</th>\n",
|
||
" <td>88.925870</td>\n",
|
||
" <td>45.619885</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Germany</th>\n",
|
||
" <td>88.626427</td>\n",
|
||
" <td>39.011078</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Italy</th>\n",
|
||
" <td>88.413664</td>\n",
|
||
" <td>37.547913</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Canada</th>\n",
|
||
" <td>88.239796</td>\n",
|
||
" <td>34.628866</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Slovenia</th>\n",
|
||
" <td>88.234043</td>\n",
|
||
" <td>28.061728</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Morocco</th>\n",
|
||
" <td>88.166667</td>\n",
|
||
" <td>18.833333</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Turkey</th>\n",
|
||
" <td>88.096154</td>\n",
|
||
" <td>25.800000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Portugal</th>\n",
|
||
" <td>88.057685</td>\n",
|
||
" <td>26.332615</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" points price\n",
|
||
"country \n",
|
||
"England 92.888889 47.500000\n",
|
||
"Austria 89.276742 31.192106\n",
|
||
"France 88.925870 45.619885\n",
|
||
"Germany 88.626427 39.011078\n",
|
||
"Italy 88.413664 37.547913\n",
|
||
"Canada 88.239796 34.628866\n",
|
||
"Slovenia 88.234043 28.061728\n",
|
||
"Morocco 88.166667 18.833333\n",
|
||
"Turkey 88.096154 25.800000\n",
|
||
"Portugal 88.057685 26.332615"
|
||
]
|
||
},
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# сортировка по столбцу points\n",
|
||
"sorted_data = df_mean.sort_values('points', ascending=False) # Сортируем датафрейм со средними значениями по убыванию points\n",
|
||
"sorted_data.head(10) # Выводим первые 10 строк sorted_data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 390
|
||
},
|
||
"id": "_7_n-qrOjAfq",
|
||
"outputId": "ce1da65e-7c1b-4ad1-9634-96b814600ea1"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/wx/b8w5bvpx5hjdgyvqlfp38x940000gn/T/ipykernel_15726/1962610003.py:2: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
|
||
" data.groupby(['country', 'region_1', 'region_2']).mean().head(10) # Выполняем группировку по трем столбцам (считаем среднее значение) и выводим первые 10 строк\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th>points</th>\n",
|
||
" <th>price</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>country</th>\n",
|
||
" <th>region_1</th>\n",
|
||
" <th>region_2</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th rowspan=\"10\" valign=\"top\">US</th>\n",
|
||
" <th>Adelaida District</th>\n",
|
||
" <th>Central Coast</th>\n",
|
||
" <td>90.120000</td>\n",
|
||
" <td>48.560000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Alexander Valley</th>\n",
|
||
" <th>Sonoma</th>\n",
|
||
" <td>87.773486</td>\n",
|
||
" <td>35.901582</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Alta Mesa</th>\n",
|
||
" <th>Central Valley</th>\n",
|
||
" <td>87.181818</td>\n",
|
||
" <td>15.636364</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Amador County</th>\n",
|
||
" <th>Sierra Foothills</th>\n",
|
||
" <td>86.676790</td>\n",
|
||
" <td>24.341304</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Amador-Napa</th>\n",
|
||
" <th>California Other</th>\n",
|
||
" <td>84.000000</td>\n",
|
||
" <td>12.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Ancient Lakes</th>\n",
|
||
" <th>Columbia Valley</th>\n",
|
||
" <td>86.555556</td>\n",
|
||
" <td>18.777778</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Anderson Valley</th>\n",
|
||
" <th>Mendocino/Lake Counties</th>\n",
|
||
" <td>89.617470</td>\n",
|
||
" <td>40.626506</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Anderson Valley-Sonoma County-Cole Ranch</th>\n",
|
||
" <th>North Coast</th>\n",
|
||
" <td>87.000000</td>\n",
|
||
" <td>18.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Antelope Valley of the California High Desert</th>\n",
|
||
" <th>South Coast</th>\n",
|
||
" <td>89.000000</td>\n",
|
||
" <td>21.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Applegate Valley</th>\n",
|
||
" <th>Southern Oregon</th>\n",
|
||
" <td>87.392405</td>\n",
|
||
" <td>31.253165</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" points \\\n",
|
||
"country region_1 region_2 \n",
|
||
"US Adelaida District Central Coast 90.120000 \n",
|
||
" Alexander Valley Sonoma 87.773486 \n",
|
||
" Alta Mesa Central Valley 87.181818 \n",
|
||
" Amador County Sierra Foothills 86.676790 \n",
|
||
" Amador-Napa California Other 84.000000 \n",
|
||
" Ancient Lakes Columbia Valley 86.555556 \n",
|
||
" Anderson Valley Mendocino/Lake Counties 89.617470 \n",
|
||
" Anderson Valley-Sonoma County-Cole Ranch North Coast 87.000000 \n",
|
||
" Antelope Valley of the California High Desert South Coast 89.000000 \n",
|
||
" Applegate Valley Southern Oregon 87.392405 \n",
|
||
"\n",
|
||
" price \n",
|
||
"country region_1 region_2 \n",
|
||
"US Adelaida District Central Coast 48.560000 \n",
|
||
" Alexander Valley Sonoma 35.901582 \n",
|
||
" Alta Mesa Central Valley 15.636364 \n",
|
||
" Amador County Sierra Foothills 24.341304 \n",
|
||
" Amador-Napa California Other 12.000000 \n",
|
||
" Ancient Lakes Columbia Valley 18.777778 \n",
|
||
" Anderson Valley Mendocino/Lake Counties 40.626506 \n",
|
||
" Anderson Valley-Sonoma County-Cole Ranch North Coast 18.000000 \n",
|
||
" Antelope Valley of the California High Desert South Coast 21.000000 \n",
|
||
" Applegate Valley Southern Oregon 31.253165 "
|
||
]
|
||
},
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# группировка по трем столбцам\n",
|
||
"data.groupby(['country', 'region_1', 'region_2']).mean().head(10) # Выполняем группировку по трем столбцам (считаем среднее значение) и выводим первые 10 строк"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"metadata": {
|
||
"id": "X6KDR8HPjAf3"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"ename": "SyntaxError",
|
||
"evalue": "invalid syntax (1262463914.py, line 3)",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;36m Cell \u001b[0;32mIn[25], line 3\u001b[0;36m\u001b[0m\n\u001b[0;31m Join - позволяет объединять несколько таблиц в единую по ключам (одинаковым столбцам).\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"## 4. Join\n",
|
||
"\n",
|
||
"Join - позволяет объединять несколько таблиц в единую по ключам (одинаковым столбцам). \n",
|
||
"\n",
|
||
"Join бывает разный:\n",
|
||
"* Left\n",
|
||
"* Right\n",
|
||
"* Inner\n",
|
||
"* FullJoin"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "fI0-DwH7jAf-"
|
||
},
|
||
"source": [
|
||
"Посмотрим на примерах, как это работает.\n",
|
||
"\n",
|
||
"Допустим, у нас есть два датафрейма:\n",
|
||
"* первый содержит информацию о студентах и ID курсах, которые они посещают,\n",
|
||
"* второй - описание курсов."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "8LQUr6fBjAgB",
|
||
"outputId": "a39750b8-76dc-4be6-da45-239a8690d30a"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# создаем первый датафрейм\n",
|
||
"data_1 = np.array([['100500', '200600', '100500', '300700', '200600', '500900'],\n",
|
||
" ['Анастасия', 'Екатерина', 'Светлана', 'Максим', 'Станислав', 'Данила'], \n",
|
||
" ['Андреева', 'Петрова', 'Иванова', 'Егоров', 'Лесницкий', 'Кудряшев']])\n",
|
||
"\n",
|
||
"names = pd.DataFrame(data_1.T, columns = ['subject_id', 'first_name', 'last_name']) # Создаем датафрейм из сформированных данных\n",
|
||
"names # Выводим датафрейм names на экран"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 173
|
||
},
|
||
"id": "gIFHRi2QjAgS",
|
||
"outputId": "5e70e778-0d82-4903-924e-51c52d56dce8"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# создаем второй датафрейм\n",
|
||
"data_2 = np.array([['100500', '200600', '300700', '400700'],\n",
|
||
" ['Математика', 'Программирование', 'Анализ данных', 'Мат. анализ'], \n",
|
||
" ['продвинутые методы математической статистики', 'расширенный курс по с++',\\\n",
|
||
" 'краткий курс для чайников', 'многомерный анализ']])\n",
|
||
"subjects = pd.DataFrame(data_2.T, columns = ['subject_id','course_name', 'description']) # Создаем датафрейм из сформированных данных\n",
|
||
"subjects # Выводим датафрейм subjects на экран"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "ME_fbI0FjAge"
|
||
},
|
||
"source": [
|
||
"#### Делаем Join:\n",
|
||
"\n",
|
||
"Left Join"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "BgXi9IbYjAgg",
|
||
"outputId": "8718fb50-57cc-46a6-d258-cafc2806e61f"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"names.merge(subjects, on='subject_id', how='left') # Объединяем два датафрейма по столбцу subject_id (join-left)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "oG6gcJB0_n8U",
|
||
"outputId": "9892e965-72d8-4c2f-aea9-2549271b3b8f"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"pd.merge(names, subjects, on='subject_id', how='right') # Объединяем два датафрейма по столбцу subject_id (join-right)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "H4M4MQfsjAgm"
|
||
},
|
||
"source": [
|
||
"Inner Join"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "Fr9FeDknjAgq",
|
||
"outputId": "eae99595-f9f3-4106-b81b-c6171911d70d"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"names.merge(subjects, on='subject_id', how='inner') # Объединяем два датафрейма по столбцу subject_id (join-inner)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "vi9i7xeFjAhH"
|
||
},
|
||
"source": [
|
||
"Outer Join"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 266
|
||
},
|
||
"id": "2oCn_zOrjAhJ",
|
||
"outputId": "b8c898ff-c6b8-41e7-b6d6-fb8dce7210e5"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df = names.merge(subjects, on='subject_id', how='outer') # Объединяем два датафрейма по столбцу subject_id (join-outer)\n",
|
||
"df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "8YCox3IxjAhW"
|
||
},
|
||
"source": [
|
||
"Join при разных названиях столбцов с ключом:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "oxIBiXBLjAhY",
|
||
"outputId": "78fedded-83a6-47e6-81cf-3e3866f11685"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"names_2 = names.copy() # Создаем копию датафрейма names\n",
|
||
"cols = names.columns.tolist() # Получаем список названий столбцов\n",
|
||
"cols[0] = 'ID' # Меняем название нулевого столбца на 'ID'\n",
|
||
"names_2.columns = cols # Присваиваем датафрейму names_2 новые названия столбцов\n",
|
||
"names_2 # Выводим на экран датафрейм names_2"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "T68tbKU0jAhj",
|
||
"outputId": "0bd367c2-ad2f-4317-d815-7162fbddf35a"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# делаем join\n",
|
||
"pd.merge(names_2, subjects, left_on='ID', right_on='subject_id', how='inner') # Объединяем два датафрейма по столбцам ID и subject_id (join-inner)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "Mg6fQ0UwjAhn"
|
||
},
|
||
"source": [
|
||
"Join по двум ключам:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"id": "s_BZm0fbjAhq"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"cols_a = ['A', 'B', 'value_1'] # Создаем список названий колонок cols_a\n",
|
||
"cols_b = ['A', 'B', 'value_2'] # Создаем список названий колонок cols_b\n",
|
||
"data_a = [[1, 1, 23], [1, 2, 34], [2, 1, 2342], [2, 2, 333]] # Создаем список значение data_a\n",
|
||
"data_b = [[1, 1, 0.1], [1, 2, 0.2], [2, 2, 0.13], [2, 3, 0.33]] # Создаем список значение data_b\n",
|
||
"df_a = pd.DataFrame(data_a, columns=cols_a) # Формируем датафрейм df_a из созданных ранее данных\n",
|
||
"df_b = pd.DataFrame(data_b, columns=cols_b) # Формируем датафрейм df_b из созданных ранее данных"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 173
|
||
},
|
||
"id": "I1bHptln_BWL",
|
||
"outputId": "dc229fc9-30dc-4cbf-910d-2f78b983d51f"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_a # Выводим на экран датафрейм df_a"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 173
|
||
},
|
||
"id": "UKsQpT1vjAh3",
|
||
"outputId": "8200e7dd-b5bb-4e7d-e1b5-5d4c12d404f1"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_b # Выводим на экран датафрейм df_b"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "5MiuPPQZjAiE",
|
||
"outputId": "7a5164c9-b899-412a-ff05-1ab874d8dfe0"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_a.merge(df_b, on=['A', 'B'], how='outer') # Объединяем два датафрейма по столбцам A и B (join-outer)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "6cRasbOXjAiS"
|
||
},
|
||
"source": [
|
||
"А join по одному ключу в данном случае выглядел бы так:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 297
|
||
},
|
||
"id": "GrTN-pM9jAiT",
|
||
"outputId": "03c0f18d-fdc7-48db-c6ec-d1d50b11f7f8"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_a.merge(df_b, on='A', how='inner') # Объединяем два датафрейма по столбцу A (join-inner)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "9V7ArTkzjAia"
|
||
},
|
||
"source": [
|
||
"Или так:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "2S02OpysjAic",
|
||
"outputId": "74be38cf-e447-45bc-b926-5886a3753860"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_a.merge(df_b, on='B', how='inner') # Объединяем два датафрейма по столбцу B (join-inner)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"id": "reSNH-05jAil"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"Или вот так по разным ключам:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "vwici4RdjAim",
|
||
"outputId": "72122abd-ea12-4fc3-bf40-ce65ed8b376b"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"pd.merge(df_a, df_b, left_on='A', right_on='B', how='inner') # Объединяем два датафрейма по столбцам A и B (join-inner)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "6tg5a_WOjAit"
|
||
},
|
||
"source": [
|
||
"Заполнение пропусков в одном из столбцов:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 266
|
||
},
|
||
"id": "RsK9n3vVAgK-",
|
||
"outputId": "1b5bd072-4650-41e6-cf04-e270d5ac3cc6"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df # Выведем на экран датафрейм df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 266
|
||
},
|
||
"id": "eolkgC-0jAi2",
|
||
"outputId": "9bdae116-fbd9-4181-9042-674be4fe0a9b"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df.first_name = df.first_name.fillna('Не заполнено') # Заменяем пропуски в столбце first_name на значение 'Не заполнено'\n",
|
||
"df # Выводим на экран датафрейм df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 266
|
||
},
|
||
"id": "pWhjhgeBjAi9",
|
||
"outputId": "b9d16d37-9b18-4db5-d27f-a32e176743d3"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df.last_name = df.last_name.fillna('Пропущено') # Заменяем пропуски в столбце last_name на значение 'Пропущено'\n",
|
||
"df # Выводим на экран датафрейм df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "XCtORa5gjAjK"
|
||
},
|
||
"source": [
|
||
"Во всей табличке:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 266
|
||
},
|
||
"id": "NC3cBEusjAjL",
|
||
"outputId": "241287e4-9036-43bd-f633-89ad814504a9"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df = df.fillna('Неизвестно') # Заменяем пропуски во всем датафрейме на значение 'Неизвестно'\n",
|
||
"df # Выводим на экран датафрейм df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "Zau_QVx8jAjV"
|
||
},
|
||
"source": [
|
||
"Разными значениями в разных столбцах:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 266
|
||
},
|
||
"id": "QFNCSrSGjAjV",
|
||
"outputId": "fb3975c1-e389-47a1-b591-6fc1f0cdaf08"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df = names.merge(subjects, on='subject_id', how='outer') # Объединяем два датафрейма по столбцу subject_id (join-outer)\n",
|
||
"df # Выводим на экран ДатаФрейм df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 34
|
||
},
|
||
"id": "-Vc-1RmSjAje",
|
||
"outputId": "0c800ab1-2ae5-4768-8fda-f1a288221c33"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"val = ['Не заполнено', 'Пропущено', 'Неизвестный курс', 'Неизвестное описание'] # Создаем список со значениями, которые будут использоваться вместо пропусков\n",
|
||
"cols = df.columns.tolist() # Получаем названия столбцов датафрейма df\n",
|
||
"cols.pop(0) # Удаляем 0 столбец (соответствует subject_id)\n",
|
||
"print(cols) # Выводим на экран список cols"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 85
|
||
},
|
||
"id": "sS1LJWsrjAjm",
|
||
"outputId": "a01124db-f1f9-4d25-8f28-aabbb3617424"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# создаем словарь с меппингом названий столбцов к значениям, какими нужно заполнить в них пропуски\n",
|
||
"dict_to_fill = dict(zip(cols, val)) # Создаем словарь, в котором в качестве ключей будут значения списка cols, а в качестве соответствующих значений - значения списка val\n",
|
||
"dict_to_fill # Выводим на экран словарь dict_to_fill"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 266
|
||
},
|
||
"id": "9JythrBSjAjp",
|
||
"outputId": "32c04fc8-b218-40b4-bfd4-ea79cbe893b8"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df = df.fillna(dict_to_fill) # Заменяем пропуски в соответствии со словарем dict_to_fill\n",
|
||
"df # Выводим на экран датафрейм df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"id": "5_aJnqtHjAjs"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"## 5. DateTime index\n",
|
||
"\n",
|
||
"DateTime Index - это особый тип индекса в pandas, предназначенный для работы с временными рядами. \n",
|
||
"Давайте познакомимся с ним поближе. Для этой цели мы подгрузим известный стандартный датасет \"Occupancy Detection Data Set\", \n",
|
||
"он содержит следующие данные:\n",
|
||
"* дата и время замера\n",
|
||
"* температура в градусах по Цельсию\n",
|
||
"* относительная влажность в % \n",
|
||
"* освещенность в Люксах\n",
|
||
"* CO2 в ppm \n",
|
||
"* коэффициент влажности\n",
|
||
"* заполненность (1 - заполнено, 0 - не заполнено)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 204
|
||
},
|
||
"id": "xICkBqa4jAjt",
|
||
"outputId": "37737fb0-d0e6-4bff-89b4-8c83c179886c"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>date</th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2015-02-04 17:51:00</td>\n",
|
||
" <td>23.18</td>\n",
|
||
" <td>27.2720</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>721.25</td>\n",
|
||
" <td>0.004793</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>2015-02-04 17:51:59</td>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2675</td>\n",
|
||
" <td>429.5</td>\n",
|
||
" <td>714.00</td>\n",
|
||
" <td>0.004783</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2015-02-04 17:53:00</td>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2450</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>713.50</td>\n",
|
||
" <td>0.004779</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>2015-02-04 17:54:00</td>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>708.25</td>\n",
|
||
" <td>0.004772</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>2015-02-04 17:55:00</td>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>704.50</td>\n",
|
||
" <td>0.004757</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" date Temperature Humidity Light CO2 HumidityRatio \\\n",
|
||
"1 2015-02-04 17:51:00 23.18 27.2720 426.0 721.25 0.004793 \n",
|
||
"2 2015-02-04 17:51:59 23.15 27.2675 429.5 714.00 0.004783 \n",
|
||
"3 2015-02-04 17:53:00 23.15 27.2450 426.0 713.50 0.004779 \n",
|
||
"4 2015-02-04 17:54:00 23.15 27.2000 426.0 708.25 0.004772 \n",
|
||
"5 2015-02-04 17:55:00 23.10 27.2000 426.0 704.50 0.004757 \n",
|
||
"\n",
|
||
" Occupancy \n",
|
||
"1 1 \n",
|
||
"2 1 \n",
|
||
"3 1 \n",
|
||
"4 1 \n",
|
||
"5 1 "
|
||
]
|
||
},
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataTraining = pd.read_csv('datatraining.txt') # Создаем датафрейм из файла datatraining.txt\n",
|
||
"dataTraining.head() # Отображаем первые 5 строк датафрейма dataTraining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "eQHTSHF-jAjw"
|
||
},
|
||
"source": [
|
||
"Давайте превратим колонку с датой в datetime index:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 27,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "zcJ96Gz4jAjx",
|
||
"outputId": "6929acd1-b62d-401b-c95f-994f43bc9af9"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>date</th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:00</th>\n",
|
||
" <td>2015-02-04 17:51:00</td>\n",
|
||
" <td>23.18</td>\n",
|
||
" <td>27.2720</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>721.25</td>\n",
|
||
" <td>0.004793</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:59</th>\n",
|
||
" <td>2015-02-04 17:51:59</td>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2675</td>\n",
|
||
" <td>429.5</td>\n",
|
||
" <td>714.00</td>\n",
|
||
" <td>0.004783</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:53:00</th>\n",
|
||
" <td>2015-02-04 17:53:00</td>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2450</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>713.50</td>\n",
|
||
" <td>0.004779</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:54:00</th>\n",
|
||
" <td>2015-02-04 17:54:00</td>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>708.25</td>\n",
|
||
" <td>0.004772</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:55:00</th>\n",
|
||
" <td>2015-02-04 17:55:00</td>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>704.50</td>\n",
|
||
" <td>0.004757</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" date Temperature Humidity Light \\\n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 2015-02-04 17:51:00 23.18 27.2720 426.0 \n",
|
||
"2015-02-04 17:51:59 2015-02-04 17:51:59 23.15 27.2675 429.5 \n",
|
||
"2015-02-04 17:53:00 2015-02-04 17:53:00 23.15 27.2450 426.0 \n",
|
||
"2015-02-04 17:54:00 2015-02-04 17:54:00 23.15 27.2000 426.0 \n",
|
||
"2015-02-04 17:55:00 2015-02-04 17:55:00 23.10 27.2000 426.0 \n",
|
||
"\n",
|
||
" CO2 HumidityRatio Occupancy \n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 721.25 0.004793 1 \n",
|
||
"2015-02-04 17:51:59 714.00 0.004783 1 \n",
|
||
"2015-02-04 17:53:00 713.50 0.004779 1 \n",
|
||
"2015-02-04 17:54:00 708.25 0.004772 1 \n",
|
||
"2015-02-04 17:55:00 704.50 0.004757 1 "
|
||
]
|
||
},
|
||
"execution_count": 27,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataTraining.index = pd.to_datetime(dataTraining.date) # Превращаем колонку date в индекс\n",
|
||
"dataTraining.head() # Отображаем первые 5 строк датафрейма dataTraining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "1Yb4I5iSEyag",
|
||
"outputId": "c00a1497-f528-4ab2-b267-5b7d5d315491"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:00</th>\n",
|
||
" <td>23.18</td>\n",
|
||
" <td>27.2720</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>721.25</td>\n",
|
||
" <td>0.004793</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:59</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2675</td>\n",
|
||
" <td>429.5</td>\n",
|
||
" <td>714.00</td>\n",
|
||
" <td>0.004783</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:53:00</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2450</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>713.50</td>\n",
|
||
" <td>0.004779</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:54:00</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>708.25</td>\n",
|
||
" <td>0.004772</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:55:00</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>704.50</td>\n",
|
||
" <td>0.004757</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Temperature Humidity Light CO2 HumidityRatio \\\n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 23.18 27.2720 426.0 721.25 0.004793 \n",
|
||
"2015-02-04 17:51:59 23.15 27.2675 429.5 714.00 0.004783 \n",
|
||
"2015-02-04 17:53:00 23.15 27.2450 426.0 713.50 0.004779 \n",
|
||
"2015-02-04 17:54:00 23.15 27.2000 426.0 708.25 0.004772 \n",
|
||
"2015-02-04 17:55:00 23.10 27.2000 426.0 704.50 0.004757 \n",
|
||
"\n",
|
||
" Occupancy \n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 1 \n",
|
||
"2015-02-04 17:51:59 1 \n",
|
||
"2015-02-04 17:53:00 1 \n",
|
||
"2015-02-04 17:54:00 1 \n",
|
||
"2015-02-04 17:55:00 1 "
|
||
]
|
||
},
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataTraining.drop('date', axis=1, inplace=True) # Удаляем колонку date из датафрейма\n",
|
||
"dataTraining.head() # Отображаем первые 5 строк датафрейма dataTraining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "9xZ3hSlDjAj7"
|
||
},
|
||
"source": [
|
||
"Давайте посмотрим, что можно делать с данными, имеющими временной индекс."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "3_YBy_F0jAj8"
|
||
},
|
||
"source": [
|
||
"### 1. Подвыборки"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 29,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "1aYyxuXUjAj-",
|
||
"outputId": "f6584641-0f32-461a-f20b-3e7372f340bc"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"DatetimeIndex(['2015-02-04 17:51:00', '2015-02-04 17:51:59',\n",
|
||
" '2015-02-04 17:53:00', '2015-02-04 17:54:00',\n",
|
||
" '2015-02-04 17:55:00', '2015-02-04 17:55:59',\n",
|
||
" '2015-02-04 17:57:00', '2015-02-04 17:57:59',\n",
|
||
" '2015-02-04 17:58:59', '2015-02-04 18:00:00',\n",
|
||
" ...\n",
|
||
" '2015-02-10 09:23:59', '2015-02-10 09:24:59',\n",
|
||
" '2015-02-10 09:26:00', '2015-02-10 09:27:00',\n",
|
||
" '2015-02-10 09:28:00', '2015-02-10 09:29:00',\n",
|
||
" '2015-02-10 09:29:59', '2015-02-10 09:30:59',\n",
|
||
" '2015-02-10 09:32:00', '2015-02-10 09:33:00'],\n",
|
||
" dtype='datetime64[ns]', name='date', length=8143, freq=None)"
|
||
]
|
||
},
|
||
"execution_count": 29,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataTraining.index # Выведем на экран колонку индексов"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 450
|
||
},
|
||
"id": "aFOWuFuojAkC",
|
||
"outputId": "b611086c-2f28-4d4f-f0f4-d177f971fa71"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:00</th>\n",
|
||
" <td>23.18</td>\n",
|
||
" <td>27.2720</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>721.25</td>\n",
|
||
" <td>0.004793</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:59</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2675</td>\n",
|
||
" <td>429.5</td>\n",
|
||
" <td>714.00</td>\n",
|
||
" <td>0.004783</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:53:00</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2450</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>713.50</td>\n",
|
||
" <td>0.004779</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:54:00</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>708.25</td>\n",
|
||
" <td>0.004772</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:55:00</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>704.50</td>\n",
|
||
" <td>0.004757</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:55:59</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.7450</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>435.00</td>\n",
|
||
" <td>0.002703</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:57:00</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.7000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>441.00</td>\n",
|
||
" <td>0.002696</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:57:59</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.7000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>441.00</td>\n",
|
||
" <td>0.002696</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:58:59</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.7000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>440.00</td>\n",
|
||
" <td>0.002696</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 00:00:00</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.7000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>438.00</td>\n",
|
||
" <td>0.002696</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>3250 rows × 6 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Temperature Humidity Light CO2 HumidityRatio \\\n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 23.18 27.2720 426.0 721.25 0.004793 \n",
|
||
"2015-02-04 17:51:59 23.15 27.2675 429.5 714.00 0.004783 \n",
|
||
"2015-02-04 17:53:00 23.15 27.2450 426.0 713.50 0.004779 \n",
|
||
"2015-02-04 17:54:00 23.15 27.2000 426.0 708.25 0.004772 \n",
|
||
"2015-02-04 17:55:00 23.10 27.2000 426.0 704.50 0.004757 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"2015-02-06 23:55:59 20.00 18.7450 0.0 435.00 0.002703 \n",
|
||
"2015-02-06 23:57:00 20.00 18.7000 0.0 441.00 0.002696 \n",
|
||
"2015-02-06 23:57:59 20.00 18.7000 0.0 441.00 0.002696 \n",
|
||
"2015-02-06 23:58:59 20.00 18.7000 0.0 440.00 0.002696 \n",
|
||
"2015-02-07 00:00:00 20.00 18.7000 0.0 438.00 0.002696 \n",
|
||
"\n",
|
||
" Occupancy \n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 1 \n",
|
||
"2015-02-04 17:51:59 1 \n",
|
||
"2015-02-04 17:53:00 1 \n",
|
||
"2015-02-04 17:54:00 1 \n",
|
||
"2015-02-04 17:55:00 1 \n",
|
||
"... ... \n",
|
||
"2015-02-06 23:55:59 0 \n",
|
||
"2015-02-06 23:57:00 0 \n",
|
||
"2015-02-06 23:57:59 0 \n",
|
||
"2015-02-06 23:58:59 0 \n",
|
||
"2015-02-07 00:00:00 0 \n",
|
||
"\n",
|
||
"[3250 rows x 6 columns]"
|
||
]
|
||
},
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"period = dataTraining[(dataTraining.index>'2015-02-04') & (dataTraining.index<='2015-02-07')] # Формируем новый датафрейм period, в который запишем все данные с 4 по 7 февраля 2015 года\n",
|
||
"period # Выведем на экран датафрейм period"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 450
|
||
},
|
||
"id": "rcz2NirgjAkI",
|
||
"outputId": "5d4d6f64-5ac9-442e-cbc0-27ae3e6d67c6"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:00</th>\n",
|
||
" <td>23.18</td>\n",
|
||
" <td>27.2720</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>721.250000</td>\n",
|
||
" <td>0.004793</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:51:59</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2675</td>\n",
|
||
" <td>429.5</td>\n",
|
||
" <td>714.000000</td>\n",
|
||
" <td>0.004783</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:53:00</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2450</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>713.500000</td>\n",
|
||
" <td>0.004779</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:54:00</th>\n",
|
||
" <td>23.15</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>708.250000</td>\n",
|
||
" <td>0.004772</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-04 17:55:00</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>27.2000</td>\n",
|
||
" <td>426.0</td>\n",
|
||
" <td>704.500000</td>\n",
|
||
" <td>0.004757</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-10 09:29:00</th>\n",
|
||
" <td>21.05</td>\n",
|
||
" <td>36.0975</td>\n",
|
||
" <td>433.0</td>\n",
|
||
" <td>787.250000</td>\n",
|
||
" <td>0.005579</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-10 09:29:59</th>\n",
|
||
" <td>21.05</td>\n",
|
||
" <td>35.9950</td>\n",
|
||
" <td>433.0</td>\n",
|
||
" <td>789.500000</td>\n",
|
||
" <td>0.005563</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-10 09:30:59</th>\n",
|
||
" <td>21.10</td>\n",
|
||
" <td>36.0950</td>\n",
|
||
" <td>433.0</td>\n",
|
||
" <td>798.500000</td>\n",
|
||
" <td>0.005596</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-10 09:32:00</th>\n",
|
||
" <td>21.10</td>\n",
|
||
" <td>36.2600</td>\n",
|
||
" <td>433.0</td>\n",
|
||
" <td>820.333333</td>\n",
|
||
" <td>0.005621</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-10 09:33:00</th>\n",
|
||
" <td>21.10</td>\n",
|
||
" <td>36.2000</td>\n",
|
||
" <td>447.0</td>\n",
|
||
" <td>821.000000</td>\n",
|
||
" <td>0.005612</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>8143 rows × 6 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Temperature Humidity Light CO2 HumidityRatio \\\n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 23.18 27.2720 426.0 721.250000 0.004793 \n",
|
||
"2015-02-04 17:51:59 23.15 27.2675 429.5 714.000000 0.004783 \n",
|
||
"2015-02-04 17:53:00 23.15 27.2450 426.0 713.500000 0.004779 \n",
|
||
"2015-02-04 17:54:00 23.15 27.2000 426.0 708.250000 0.004772 \n",
|
||
"2015-02-04 17:55:00 23.10 27.2000 426.0 704.500000 0.004757 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"2015-02-10 09:29:00 21.05 36.0975 433.0 787.250000 0.005579 \n",
|
||
"2015-02-10 09:29:59 21.05 35.9950 433.0 789.500000 0.005563 \n",
|
||
"2015-02-10 09:30:59 21.10 36.0950 433.0 798.500000 0.005596 \n",
|
||
"2015-02-10 09:32:00 21.10 36.2600 433.0 820.333333 0.005621 \n",
|
||
"2015-02-10 09:33:00 21.10 36.2000 447.0 821.000000 0.005612 \n",
|
||
"\n",
|
||
" Occupancy \n",
|
||
"date \n",
|
||
"2015-02-04 17:51:00 1 \n",
|
||
"2015-02-04 17:51:59 1 \n",
|
||
"2015-02-04 17:53:00 1 \n",
|
||
"2015-02-04 17:54:00 1 \n",
|
||
"2015-02-04 17:55:00 1 \n",
|
||
"... ... \n",
|
||
"2015-02-10 09:29:00 1 \n",
|
||
"2015-02-10 09:29:59 1 \n",
|
||
"2015-02-10 09:30:59 1 \n",
|
||
"2015-02-10 09:32:00 1 \n",
|
||
"2015-02-10 09:33:00 1 \n",
|
||
"\n",
|
||
"[8143 rows x 6 columns]"
|
||
]
|
||
},
|
||
"execution_count": 31,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"month_set = dataTraining[dataTraining.index.month == 2] # Формируем новый датафрейм month_set, в который запишем все данные по февралю любого года\n",
|
||
"month_set # Выведем на экран датафрейм month_set"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 450
|
||
},
|
||
"id": "QjMdNFlHjAkM",
|
||
"outputId": "6bbb6eee-1c3e-4309-ba55-77fa0ef0cb12"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:00:00</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>17.060000</td>\n",
|
||
" <td>268.000000</td>\n",
|
||
" <td>445.250000</td>\n",
|
||
" <td>0.002975</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:01:00</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>17.033333</td>\n",
|
||
" <td>268.250000</td>\n",
|
||
" <td>447.500000</td>\n",
|
||
" <td>0.002970</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:01:59</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>17.066667</td>\n",
|
||
" <td>266.000000</td>\n",
|
||
" <td>446.333333</td>\n",
|
||
" <td>0.002976</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:02:59</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>17.000000</td>\n",
|
||
" <td>270.250000</td>\n",
|
||
" <td>453.500000</td>\n",
|
||
" <td>0.002965</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:04:00</th>\n",
|
||
" <td>23.10</td>\n",
|
||
" <td>16.972500</td>\n",
|
||
" <td>268.500000</td>\n",
|
||
" <td>449.250000</td>\n",
|
||
" <td>0.002960</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:56:00</th>\n",
|
||
" <td>22.70</td>\n",
|
||
" <td>17.050000</td>\n",
|
||
" <td>144.750000</td>\n",
|
||
" <td>442.500000</td>\n",
|
||
" <td>0.002902</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:57:00</th>\n",
|
||
" <td>22.70</td>\n",
|
||
" <td>17.100000</td>\n",
|
||
" <td>115.000000</td>\n",
|
||
" <td>443.750000</td>\n",
|
||
" <td>0.002910</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:58:00</th>\n",
|
||
" <td>22.65</td>\n",
|
||
" <td>17.100000</td>\n",
|
||
" <td>131.000000</td>\n",
|
||
" <td>445.000000</td>\n",
|
||
" <td>0.002902</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:59:00</th>\n",
|
||
" <td>22.60</td>\n",
|
||
" <td>17.100000</td>\n",
|
||
" <td>140.000000</td>\n",
|
||
" <td>443.250000</td>\n",
|
||
" <td>0.002893</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-07 13:59:59</th>\n",
|
||
" <td>22.60</td>\n",
|
||
" <td>17.100000</td>\n",
|
||
" <td>167.666667</td>\n",
|
||
" <td>444.000000</td>\n",
|
||
" <td>0.002893</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>61 rows × 6 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Temperature Humidity Light CO2 \\\n",
|
||
"date \n",
|
||
"2015-02-07 13:00:00 23.10 17.060000 268.000000 445.250000 \n",
|
||
"2015-02-07 13:01:00 23.10 17.033333 268.250000 447.500000 \n",
|
||
"2015-02-07 13:01:59 23.10 17.066667 266.000000 446.333333 \n",
|
||
"2015-02-07 13:02:59 23.10 17.000000 270.250000 453.500000 \n",
|
||
"2015-02-07 13:04:00 23.10 16.972500 268.500000 449.250000 \n",
|
||
"... ... ... ... ... \n",
|
||
"2015-02-07 13:56:00 22.70 17.050000 144.750000 442.500000 \n",
|
||
"2015-02-07 13:57:00 22.70 17.100000 115.000000 443.750000 \n",
|
||
"2015-02-07 13:58:00 22.65 17.100000 131.000000 445.000000 \n",
|
||
"2015-02-07 13:59:00 22.60 17.100000 140.000000 443.250000 \n",
|
||
"2015-02-07 13:59:59 22.60 17.100000 167.666667 444.000000 \n",
|
||
"\n",
|
||
" HumidityRatio Occupancy \n",
|
||
"date \n",
|
||
"2015-02-07 13:00:00 0.002975 0 \n",
|
||
"2015-02-07 13:01:00 0.002970 0 \n",
|
||
"2015-02-07 13:01:59 0.002976 0 \n",
|
||
"2015-02-07 13:02:59 0.002965 0 \n",
|
||
"2015-02-07 13:04:00 0.002960 0 \n",
|
||
"... ... ... \n",
|
||
"2015-02-07 13:56:00 0.002902 0 \n",
|
||
"2015-02-07 13:57:00 0.002910 0 \n",
|
||
"2015-02-07 13:58:00 0.002902 0 \n",
|
||
"2015-02-07 13:59:00 0.002893 0 \n",
|
||
"2015-02-07 13:59:59 0.002893 0 \n",
|
||
"\n",
|
||
"[61 rows x 6 columns]"
|
||
]
|
||
},
|
||
"execution_count": 32,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"day_set = dataTraining[(dataTraining.index.weekday == 5) & (dataTraining.index.hour == 13)] # Формируем новый датафрейм day_set, в который запишем данные за все субботы в промежуток с 13-00 до 13-59\n",
|
||
"day_set # Выведем на экран датафрейм day_set\n",
|
||
"# Значения индексов index.weekday может принимать значения от 0 до 6, где 0 - понедельник, 1 - вторник и т.д.\n",
|
||
"# Значения индексов index.day может принимать значения от 1 до 31, в соответствии с числом месяца."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 33,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 450
|
||
},
|
||
"id": "TBnaueJ_jAkQ",
|
||
"outputId": "dcd979d7-c575-4b42-c172-73b294093857"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/wx/b8w5bvpx5hjdgyvqlfp38x940000gn/T/ipykernel_15726/247725088.py:1: FutureWarning: Indexing a DataFrame with a datetimelike index using a single string to slice the rows, like `frame[string]`, is deprecated and will be removed in a future version. Use `frame.loc[string]` instead.\n",
|
||
" dataTraining['2015-02-06'] # Отобразим данные за 6 февраля 2015 года\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 00:00:00</th>\n",
|
||
" <td>20.20</td>\n",
|
||
" <td>21.290</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>438.0</td>\n",
|
||
" <td>0.003110</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 00:01:00</th>\n",
|
||
" <td>20.20</td>\n",
|
||
" <td>21.200</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>439.0</td>\n",
|
||
" <td>0.003097</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 00:02:00</th>\n",
|
||
" <td>20.20</td>\n",
|
||
" <td>21.290</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>441.5</td>\n",
|
||
" <td>0.003110</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 00:03:00</th>\n",
|
||
" <td>20.20</td>\n",
|
||
" <td>21.290</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>444.0</td>\n",
|
||
" <td>0.003110</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 00:04:00</th>\n",
|
||
" <td>20.20</td>\n",
|
||
" <td>21.290</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>446.5</td>\n",
|
||
" <td>0.003110</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:55:00</th>\n",
|
||
" <td>19.89</td>\n",
|
||
" <td>18.790</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>441.5</td>\n",
|
||
" <td>0.002691</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:55:59</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.745</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>435.0</td>\n",
|
||
" <td>0.002703</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:57:00</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.700</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>441.0</td>\n",
|
||
" <td>0.002696</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:57:59</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.700</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>441.0</td>\n",
|
||
" <td>0.002696</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-06 23:58:59</th>\n",
|
||
" <td>20.00</td>\n",
|
||
" <td>18.700</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>440.0</td>\n",
|
||
" <td>0.002696</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>1440 rows × 6 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Temperature Humidity Light CO2 HumidityRatio \\\n",
|
||
"date \n",
|
||
"2015-02-06 00:00:00 20.20 21.290 0.0 438.0 0.003110 \n",
|
||
"2015-02-06 00:01:00 20.20 21.200 0.0 439.0 0.003097 \n",
|
||
"2015-02-06 00:02:00 20.20 21.290 0.0 441.5 0.003110 \n",
|
||
"2015-02-06 00:03:00 20.20 21.290 0.0 444.0 0.003110 \n",
|
||
"2015-02-06 00:04:00 20.20 21.290 0.0 446.5 0.003110 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"2015-02-06 23:55:00 19.89 18.790 0.0 441.5 0.002691 \n",
|
||
"2015-02-06 23:55:59 20.00 18.745 0.0 435.0 0.002703 \n",
|
||
"2015-02-06 23:57:00 20.00 18.700 0.0 441.0 0.002696 \n",
|
||
"2015-02-06 23:57:59 20.00 18.700 0.0 441.0 0.002696 \n",
|
||
"2015-02-06 23:58:59 20.00 18.700 0.0 440.0 0.002696 \n",
|
||
"\n",
|
||
" Occupancy \n",
|
||
"date \n",
|
||
"2015-02-06 00:00:00 0 \n",
|
||
"2015-02-06 00:01:00 0 \n",
|
||
"2015-02-06 00:02:00 0 \n",
|
||
"2015-02-06 00:03:00 0 \n",
|
||
"2015-02-06 00:04:00 0 \n",
|
||
"... ... \n",
|
||
"2015-02-06 23:55:00 0 \n",
|
||
"2015-02-06 23:55:59 0 \n",
|
||
"2015-02-06 23:57:00 0 \n",
|
||
"2015-02-06 23:57:59 0 \n",
|
||
"2015-02-06 23:58:59 0 \n",
|
||
"\n",
|
||
"[1440 rows x 6 columns]"
|
||
]
|
||
},
|
||
"execution_count": 33,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataTraining['2015-02-06'] # Отобразим данные за 6 февраля 2015 года"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 34,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 142
|
||
},
|
||
"id": "350rNvXEjAkS",
|
||
"outputId": "378a259e-82e2-4826-eac0-8db00d00c9d8"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-08 14:55:00</th>\n",
|
||
" <td>20.290</td>\n",
|
||
" <td>26.2</td>\n",
|
||
" <td>85.666667</td>\n",
|
||
" <td>418.666667</td>\n",
|
||
" <td>0.003853</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2015-02-08 14:55:59</th>\n",
|
||
" <td>20.315</td>\n",
|
||
" <td>26.2</td>\n",
|
||
" <td>59.250000</td>\n",
|
||
" <td>422.500000</td>\n",
|
||
" <td>0.003859</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Temperature Humidity Light CO2 \\\n",
|
||
"date \n",
|
||
"2015-02-08 14:55:00 20.290 26.2 85.666667 418.666667 \n",
|
||
"2015-02-08 14:55:59 20.315 26.2 59.250000 422.500000 \n",
|
||
"\n",
|
||
" HumidityRatio Occupancy \n",
|
||
"date \n",
|
||
"2015-02-08 14:55:00 0.003853 0 \n",
|
||
"2015-02-08 14:55:59 0.003859 0 "
|
||
]
|
||
},
|
||
"execution_count": 34,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataTraining['2015-02-08 14:55':'2015-02-08 14:56'] # Отобразим данные, начиная с 14:55 и до 14:56 8 февраля 2015 года"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "C8xqSqQujAmh"
|
||
},
|
||
"source": [
|
||
"## 6. Встроенные статистические функции\n",
|
||
"\n",
|
||
"Кроме уже известных и понятных нам суммы и среднего, есть и другие функции. Остановимся на них подробнее."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 35,
|
||
"metadata": {
|
||
"id": "hR8AlUzejAmh"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"### 1. Корреляция\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 39,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import matplotlib as plt\n",
|
||
"import seaborn"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "M7H3eXu0jAmi"
|
||
},
|
||
"source": [
|
||
"Обычный коэффициент корреляции Пирсона"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 37,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 235
|
||
},
|
||
"id": "IJLYQkG0jAmj",
|
||
"outputId": "bb23dcea-6f7d-47d8-9c5f-90e39eb25cfa"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <th>Light</th>\n",
|
||
" <th>CO2</th>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>Temperature</th>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>-0.141759</td>\n",
|
||
" <td>0.649942</td>\n",
|
||
" <td>0.559894</td>\n",
|
||
" <td>0.151762</td>\n",
|
||
" <td>0.538220</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Humidity</th>\n",
|
||
" <td>-0.141759</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.037828</td>\n",
|
||
" <td>0.439023</td>\n",
|
||
" <td>0.955198</td>\n",
|
||
" <td>0.132964</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Light</th>\n",
|
||
" <td>0.649942</td>\n",
|
||
" <td>0.037828</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.664022</td>\n",
|
||
" <td>0.230420</td>\n",
|
||
" <td>0.907352</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>CO2</th>\n",
|
||
" <td>0.559894</td>\n",
|
||
" <td>0.439023</td>\n",
|
||
" <td>0.664022</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.626556</td>\n",
|
||
" <td>0.712235</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>HumidityRatio</th>\n",
|
||
" <td>0.151762</td>\n",
|
||
" <td>0.955198</td>\n",
|
||
" <td>0.230420</td>\n",
|
||
" <td>0.626556</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>0.300282</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Occupancy</th>\n",
|
||
" <td>0.538220</td>\n",
|
||
" <td>0.132964</td>\n",
|
||
" <td>0.907352</td>\n",
|
||
" <td>0.712235</td>\n",
|
||
" <td>0.300282</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Temperature Humidity Light CO2 HumidityRatio \\\n",
|
||
"Temperature 1.000000 -0.141759 0.649942 0.559894 0.151762 \n",
|
||
"Humidity -0.141759 1.000000 0.037828 0.439023 0.955198 \n",
|
||
"Light 0.649942 0.037828 1.000000 0.664022 0.230420 \n",
|
||
"CO2 0.559894 0.439023 0.664022 1.000000 0.626556 \n",
|
||
"HumidityRatio 0.151762 0.955198 0.230420 0.626556 1.000000 \n",
|
||
"Occupancy 0.538220 0.132964 0.907352 0.712235 0.300282 \n",
|
||
"\n",
|
||
" Occupancy \n",
|
||
"Temperature 0.538220 \n",
|
||
"Humidity 0.132964 \n",
|
||
"Light 0.907352 \n",
|
||
"CO2 0.712235 \n",
|
||
"HumidityRatio 0.300282 \n",
|
||
"Occupancy 1.000000 "
|
||
]
|
||
},
|
||
"execution_count": 37,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataTraining.corr() # Выведем матрицу корреляции для датафрейма dataTraining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 40,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<Axes: >"
|
||
]
|
||
},
|
||
"execution_count": 40,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"seaborn.heatmap(dataTraining.corr())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"id": "qG6LB7yDjAmx"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"### 2. Медиана"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 136
|
||
},
|
||
"id": "YMbWszYgjAmx",
|
||
"outputId": "d66c8b8e-f38a-43f3-cfbd-93178a035139"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"dataTraining.median() # Выведем медиану для датафрейма dataTraining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"id": "yRYKb92DjAm5"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"### 4. Уникальные значения и их количество"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 136
|
||
},
|
||
"id": "BlNFl4MxjAm9",
|
||
"outputId": "68433809-3603-42f7-cdec-aa4594cfe6f2"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"dataTraining.nunique() # Выведем количество уникльных значений для всех столбцов датафрейма dataTraining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 34
|
||
},
|
||
"id": "4EKcGjQKjAnA",
|
||
"outputId": "08915e97-77d3-4b26-e040-aa301943ec15"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"dataTraining.Occupancy.unique() # Выведем уникальные значения для столбца Occupancy датафрейма dataTraining"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "8F6G2AUnKFCA"
|
||
},
|
||
"source": [
|
||
"# Глоссарий\n",
|
||
"\n",
|
||
"\n",
|
||
"pd.DataFrame(данные, columns = [колонки, если есть], index = [индексы ,если есть]) - создать датафрейм\n",
|
||
"\n",
|
||
"pd.read_csv(полный адрес расположения файла) - открыть .csv файл\n",
|
||
"\n",
|
||
"------------\n",
|
||
"\n",
|
||
".head() - посмотреть верхушку датафрейма (первые n строк)\n",
|
||
"\n",
|
||
".tail() - посмотреть конец датафрейма (последние n строк)\n",
|
||
"\n",
|
||
".columns - список колонок датафрейма\n",
|
||
"\n",
|
||
".values - вывести массив всех значений датафрейма\n",
|
||
"\n",
|
||
".index - список индексов датафрейма\n",
|
||
"\n",
|
||
".tolist() - перевести в список\n",
|
||
"\n",
|
||
".count() - посчитать количество определенных величин во фрейме\n",
|
||
"\n",
|
||
".describe() - посмотреть основные статистические характеристики фрейма\n",
|
||
"\n",
|
||
".shape - форма фрейма (строки, колонки)\n",
|
||
"\n",
|
||
".size - размер фрейма строки*колонки\n",
|
||
"\n",
|
||
".info() - информация о данных каждой колонки\n",
|
||
"\n",
|
||
".dtypes - тип данных каждой колонки\n",
|
||
"\n",
|
||
".isnull() - где недостает значений\n",
|
||
"\n",
|
||
".isna()- есть ли значения None\n",
|
||
"\n",
|
||
".dropna() - выкинуть строки/колонки с None\n",
|
||
"\n",
|
||
".fillna() - заполнить заданным значеним ячейки, где есть None\n",
|
||
"\n",
|
||
".loc[] - вывести значения по названиям колонок\n",
|
||
"\n",
|
||
".iloc[] - вывести значения по индексам колонок\n",
|
||
"\n",
|
||
".drop() - выкинуть определенные значения\n",
|
||
"\n",
|
||
"--------------\n",
|
||
"\n",
|
||
"pd.to_datetime(колонка, которую переводим в формат временного ряда)\n",
|
||
"\n",
|
||
".groupby() - сгруппировать по конкретному признаку\n",
|
||
"\n",
|
||
".copy() - создать копию\n",
|
||
"\n",
|
||
".sort_values() - сортировка значений\n",
|
||
"\n",
|
||
"pd.concat([df1,df2]) - конкатенация фреймов\n",
|
||
"\n",
|
||
".merge(второй_датафрейм, on = 'общая колонка, по которой склеиваем', how = 'с какой стороны') - конкатенация фреймов через общий признак\n",
|
||
"\n",
|
||
"-------------\n",
|
||
"\n",
|
||
"\n",
|
||
".corr() - вычислить корреляцию\n",
|
||
"\n",
|
||
".median() - вычислить медиану\n",
|
||
"\n",
|
||
".cumsum() - вычислить кумулятивную сумму\n",
|
||
"\n",
|
||
".cumprod() - вычислить кумулятивное произведение\n",
|
||
"\n",
|
||
".cummax() - вычислить кумулятивный максимум\n",
|
||
"\n",
|
||
"-------------\n",
|
||
"\n",
|
||
".quantile([]) - вычислить квантили\n",
|
||
"\n",
|
||
".nunique() - уникальные значения для n-колонок/строк\n",
|
||
"\n",
|
||
".unique() - уникальные значения определенной колонки/строк\n",
|
||
"\n",
|
||
"------------\n",
|
||
"\n",
|
||
".apply(функция) - применить функцию для колонки/строки\n",
|
||
"\n",
|
||
".agg(набор_функций) - применить ряд функций для колонки/строки\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"id": "Ku19ab06hkRZ"
|
||
},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"colab": {
|
||
"collapsed_sections": [
|
||
"_mybfuLlhkzU",
|
||
"0Chntu25WIF2",
|
||
"Af1_T2N8jAfF",
|
||
"X6KDR8HPjAf3",
|
||
"C8xqSqQujAmh",
|
||
"hR8AlUzejAmh",
|
||
"qG6LB7yDjAmx",
|
||
"xzJAnTajjAm3",
|
||
"yRYKb92DjAm5",
|
||
"Idy8pVuvjAnD",
|
||
"G_jD-MltjAnR",
|
||
"9TdHEC0ajAng",
|
||
"3ANmDztPdeNy"
|
||
],
|
||
"provenance": []
|
||
},
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.13.2"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|