{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"```{contents}\n",
":depth: 4\n",
"```\n",
"\n",
"# Pandas\n",
"\n",
"## ¿A que nos sirve?\n",
"\n",
"Con Pandas podemos manejar nuestros datos, **modificandolos**, **transformandolos** y **analizandolos**.\n",
"\n",
"En particular podemos:\n",
"* limpiar los datos presentes en un DataFrame\n",
"* Visualizar los datos con la ayuda de Matplotlib\n",
"* Almacenar los datos trasformados en otro archivo CSV\n",
"\n",
"Panda está construido con base en Numpy y normalmente su output preferido es **Scipy** o **Scikit-learn**. \n",
"\n",
"Antes que todo tendremos que importar los paquetes:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Merge and append\n",
"\n",
"Una de las cosas que utilizaremos más cuando harémos data cleaning es juntar data frame así de poder obtener una base más funcional. Para hacer esto tenemos diferentes funciones con Python.\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Antes de ver los Join analizaremos como podemos concatenar data frames:"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
" 0 | \n",
" A4 | \n",
" B4 | \n",
" C4 | \n",
" D4 | \n",
"
\n",
" \n",
" 1 | \n",
" A5 | \n",
" B5 | \n",
" C5 | \n",
" D5 | \n",
"
\n",
" \n",
" 2 | \n",
" A6 | \n",
" B6 | \n",
" C6 | \n",
" D6 | \n",
"
\n",
" \n",
" 3 | \n",
" A7 | \n",
" B7 | \n",
" C7 | \n",
" D7 | \n",
"
\n",
" \n",
" 8 | \n",
" A8 | \n",
" B8 | \n",
" C8 | \n",
" D8 | \n",
"
\n",
" \n",
" 9 | \n",
" A9 | \n",
" B9 | \n",
" C9 | \n",
" D9 | \n",
"
\n",
" \n",
" 10 | \n",
" A10 | \n",
" B10 | \n",
" C10 | \n",
" D10 | \n",
"
\n",
" \n",
" 11 | \n",
" A11 | \n",
" B11 | \n",
" C11 | \n",
" D11 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 A0 B0 C0 D0\n",
"1 A1 B1 C1 D1\n",
"2 A2 B2 C2 D2\n",
"3 A3 B3 C3 D3\n",
"0 A4 B4 C4 D4\n",
"1 A5 B5 C5 D5\n",
"2 A6 B6 C6 D6\n",
"3 A7 B7 C7 D7\n",
"8 A8 B8 C8 D8\n",
"9 A9 B9 C9 D9\n",
"10 A10 B10 C10 D10\n",
"11 A11 B11 C11 D11"
]
},
"execution_count": 127,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" df1 = pd.DataFrame(\n",
" {\n",
" \"A\": [\"A0\", \"A1\", \"A2\", \"A3\"],\n",
" \"B\": [\"B0\", \"B1\", \"B2\", \"B3\"],\n",
" \"C\": [\"C0\", \"C1\", \"C2\", \"C3\"],\n",
" \"D\": [\"D0\", \"D1\", \"D2\", \"D3\"],\n",
" },\n",
" index=[0, 1, 2, 3],\n",
" )\n",
"\n",
"\n",
"df2 = pd.DataFrame(\n",
" {\n",
" \"A\": [\"A4\", \"A5\", \"A6\", \"A7\"],\n",
" \"B\": [\"B4\", \"B5\", \"B6\", \"B7\"],\n",
" \"C\": [\"C4\", \"C5\", \"C6\", \"C7\"],\n",
" \"D\": [\"D4\", \"D5\", \"D6\", \"D7\"],\n",
" },\n",
" )\n",
" \n",
"\n",
"df3 = pd.DataFrame(\n",
" {\n",
" \"A\": [\"A8\", \"A9\", \"A10\", \"A11\"],\n",
" \"B\": [\"B8\", \"B9\", \"B10\", \"B11\"],\n",
" \"C\": [\"C8\", \"C9\", \"C10\", \"C11\"],\n",
" \"D\": [\"D8\", \"D9\", \"D10\", \"D11\"],\n",
" },\n",
" index=[8, 9, 10, 11],\n",
" )\n",
" \n",
"\n",
"frames = [df1, df2, df3]\n",
"\n",
"result = pd.concat(frames)\n",
"\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nuestra función tiene las siguientes propriedades:\n",
" \n",
"pd.concat(\n",
" objs,\n",
" axis=0,\n",
" join=\"outer\",\n",
" ignore_index=False,\n",
" keys=None,\n",
" levels=None,\n",
" names=None,\n",
" verify_integrity=False,\n",
" copy=True,\n",
") "
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" x | \n",
" 0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
" y | \n",
" 0 | \n",
" A4 | \n",
" B4 | \n",
" C4 | \n",
" D4 | \n",
"
\n",
" \n",
" 1 | \n",
" A5 | \n",
" B5 | \n",
" C5 | \n",
" D5 | \n",
"
\n",
" \n",
" 2 | \n",
" A6 | \n",
" B6 | \n",
" C6 | \n",
" D6 | \n",
"
\n",
" \n",
" 3 | \n",
" A7 | \n",
" B7 | \n",
" C7 | \n",
" D7 | \n",
"
\n",
" \n",
" z | \n",
" 8 | \n",
" A8 | \n",
" B8 | \n",
" C8 | \n",
" D8 | \n",
"
\n",
" \n",
" 9 | \n",
" A9 | \n",
" B9 | \n",
" C9 | \n",
" D9 | \n",
"
\n",
" \n",
" 10 | \n",
" A10 | \n",
" B10 | \n",
" C10 | \n",
" D10 | \n",
"
\n",
" \n",
" 11 | \n",
" A11 | \n",
" B11 | \n",
" C11 | \n",
" D11 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"x 0 A0 B0 C0 D0\n",
" 1 A1 B1 C1 D1\n",
" 2 A2 B2 C2 D2\n",
" 3 A3 B3 C3 D3\n",
"y 0 A4 B4 C4 D4\n",
" 1 A5 B5 C5 D5\n",
" 2 A6 B6 C6 D6\n",
" 3 A7 B7 C7 D7\n",
"z 8 A8 B8 C8 D8\n",
" 9 A9 B9 C9 D9\n",
" 10 A10 B10 C10 D10\n",
" 11 A11 B11 C11 D11"
]
},
"execution_count": 129,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.concat(frames, keys=[\"x\", \"y\", \"z\"])\n",
" \n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tendremos por lo tanto un objecto con un idnice jerarquizado:"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A4 | \n",
" B4 | \n",
" C4 | \n",
" D4 | \n",
"
\n",
" \n",
" 1 | \n",
" A5 | \n",
" B5 | \n",
" C5 | \n",
" D5 | \n",
"
\n",
" \n",
" 2 | \n",
" A6 | \n",
" B6 | \n",
" C6 | \n",
" D6 | \n",
"
\n",
" \n",
" 3 | \n",
" A7 | \n",
" B7 | \n",
" C7 | \n",
" D7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 A4 B4 C4 D4\n",
"1 A5 B5 C5 D5\n",
"2 A6 B6 C6 D6\n",
"3 A7 B7 C7 D7"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result.loc[\"y\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podemos tambien definir el eje de donde queremos hacer el appen y decidir si queremos la union (join=outer) o la interseccion (join=inner):"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [],
"source": [
"df4 = pd.DataFrame(\n",
" {\n",
" \"B\": [\"B2\", \"B3\", \"B6\", \"B7\"],\n",
" \"D\": [\"D2\", \"D3\", \"D6\", \"D7\"],\n",
" \"F\": [\"F2\", \"F3\", \"F6\", \"F7\"],\n",
" },\n",
" index=[2, 3, 6, 7],\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" B | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
" B2 | \n",
" D2 | \n",
" F2 | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
" B3 | \n",
" D3 | \n",
" F3 | \n",
"
\n",
" \n",
" 6 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" B6 | \n",
" D6 | \n",
" F6 | \n",
"
\n",
" \n",
" 7 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" B7 | \n",
" D7 | \n",
" F7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D B D F\n",
"0 A0 B0 C0 D0 NaN NaN NaN\n",
"1 A1 B1 C1 D1 NaN NaN NaN\n",
"2 A2 B2 C2 D2 B2 D2 F2\n",
"3 A3 B3 C3 D3 B3 D3 F3\n",
"6 NaN NaN NaN NaN B6 D6 F6\n",
"7 NaN NaN NaN NaN B7 D7 F7"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.concat([df1, df4], axis=1)\n",
"\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" B | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
" B2 | \n",
" D2 | \n",
" F2 | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
" B3 | \n",
" D3 | \n",
" F3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D B D F\n",
"2 A2 B2 C2 D2 B2 D2 F2\n",
"3 A3 B3 C3 D3 B3 D3 F3"
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.concat([df1, df4], axis=1, join=\"inner\")\n",
"\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para concatenar podemos utilizar tambien el append, de hecho era una función antes del concat y funciona solo pr el eje 0, nuestros renglones:"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
" 0 | \n",
" A4 | \n",
" B4 | \n",
" C4 | \n",
" D4 | \n",
"
\n",
" \n",
" 1 | \n",
" A5 | \n",
" B5 | \n",
" C5 | \n",
" D5 | \n",
"
\n",
" \n",
" 2 | \n",
" A6 | \n",
" B6 | \n",
" C6 | \n",
" D6 | \n",
"
\n",
" \n",
" 3 | \n",
" A7 | \n",
" B7 | \n",
" C7 | \n",
" D7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 A0 B0 C0 D0\n",
"1 A1 B1 C1 D1\n",
"2 A2 B2 C2 D2\n",
"3 A3 B3 C3 D3\n",
"0 A4 B4 C4 D4\n",
"1 A5 B5 C5 D5\n",
"2 A6 B6 C6 D6\n",
"3 A7 B7 C7 D7"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = df1.append(df2)\n",
"\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"¿Qué pasa si hacemos un append de los siguientes dataframes?"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 A0 B0 C0 D0\n",
"1 A1 B1 C1 D1\n",
"2 A2 B2 C2 D2\n",
"3 A3 B3 C3 D3"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" B | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" 2 | \n",
" B2 | \n",
" D2 | \n",
" F2 | \n",
"
\n",
" \n",
" 3 | \n",
" B3 | \n",
" D3 | \n",
" F3 | \n",
"
\n",
" \n",
" 6 | \n",
" B6 | \n",
" D6 | \n",
" F6 | \n",
"
\n",
" \n",
" 7 | \n",
" B7 | \n",
" D7 | \n",
" F7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" B D F\n",
"2 B2 D2 F2\n",
"3 B3 D3 F3\n",
"6 B6 D6 F6\n",
"7 B7 D7 F7"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df4"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
" NaN | \n",
"
\n",
" \n",
" 1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
" NaN | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" NaN | \n",
" B2 | \n",
" NaN | \n",
" D2 | \n",
" F2 | \n",
"
\n",
" \n",
" 3 | \n",
" NaN | \n",
" B3 | \n",
" NaN | \n",
" D3 | \n",
" F3 | \n",
"
\n",
" \n",
" 6 | \n",
" NaN | \n",
" B6 | \n",
" NaN | \n",
" D6 | \n",
" F6 | \n",
"
\n",
" \n",
" 7 | \n",
" NaN | \n",
" B7 | \n",
" NaN | \n",
" D7 | \n",
" F7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"0 A0 B0 C0 D0 NaN\n",
"1 A1 B1 C1 D1 NaN\n",
"2 A2 B2 C2 D2 NaN\n",
"3 A3 B3 C3 D3 NaN\n",
"2 NaN B2 NaN D2 F2\n",
"3 NaN B3 NaN D3 F3\n",
"6 NaN B6 NaN D6 F6\n",
"7 NaN B7 NaN D7 F7"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = df1.append(df4, sort=False)\n",
"\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podemos hacer append de multiples dataframe a la vez:"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
" 0 | \n",
" A4 | \n",
" B4 | \n",
" C4 | \n",
" D4 | \n",
"
\n",
" \n",
" 1 | \n",
" A5 | \n",
" B5 | \n",
" C5 | \n",
" D5 | \n",
"
\n",
" \n",
" 2 | \n",
" A6 | \n",
" B6 | \n",
" C6 | \n",
" D6 | \n",
"
\n",
" \n",
" 3 | \n",
" A7 | \n",
" B7 | \n",
" C7 | \n",
" D7 | \n",
"
\n",
" \n",
" 8 | \n",
" A8 | \n",
" B8 | \n",
" C8 | \n",
" D8 | \n",
"
\n",
" \n",
" 9 | \n",
" A9 | \n",
" B9 | \n",
" C9 | \n",
" D9 | \n",
"
\n",
" \n",
" 10 | \n",
" A10 | \n",
" B10 | \n",
" C10 | \n",
" D10 | \n",
"
\n",
" \n",
" 11 | \n",
" A11 | \n",
" B11 | \n",
" C11 | \n",
" D11 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 A0 B0 C0 D0\n",
"1 A1 B1 C1 D1\n",
"2 A2 B2 C2 D2\n",
"3 A3 B3 C3 D3\n",
"0 A4 B4 C4 D4\n",
"1 A5 B5 C5 D5\n",
"2 A6 B6 C6 D6\n",
"3 A7 B7 C7 D7\n",
"8 A8 B8 C8 D8\n",
"9 A9 B9 C9 D9\n",
"10 A10 B10 C10 D10\n",
"11 A11 B11 C11 D11"
]
},
"execution_count": 138,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = df1.append([df2, df3])\n",
"\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Más tipos de concatenación](https://pandas.pydata.org/docs/user_guide/merging.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Merge\n",
"\n",
"\n",
"Pandas nos permite de juntar dataframe de manera computacionalmente eficaz con una sintaxis similar a la de SQL. Resulta mucho más eficaz que otros lenguajes como R. Tenemos una unica función atraves de la cual, especificando los distintos argumentos, podemos obtener los diferentes join:\n",
"\n",
"\n",
"\n",
"\n",
"pd.merge(\n",
" left,\n",
" right,\n",
" how=\"inner\",\n",
" on=None,\n",
" left_on=None,\n",
" right_on=None,\n",
" left_index=False,\n",
" right_index=False,\n",
" sort=True,\n",
" suffixes=(\"_x\", \"_y\"),\n",
" copy=True,\n",
" indicator=False,\n",
" validate=None,\n",
")\n",
"\n",
"Uno de los conceptos principales es el tipo de relación que tenemos entre las llaves de los distintos data frames:\n",
"\n",
"* 1:1: juntamos los dos data frames por medio de una llave que debe ser unica\n",
"\n",
"* m:1: la llave unica es presente solo en el segundo data frame, en el primero puede ser repetida\n",
"\n",
"* m:m: el join viene efectuado sobre columna, si la llave que nos sirve para juntar los data frames es repetida obtendremos un producto cartesiano de los dos data frames"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [],
"source": [
"left = pd.DataFrame(\n",
" {\n",
" \"key\": [\"K0\", \"K1\", \"K2\", \"K3\"],\n",
" \"A\": [\"A0\", \"A1\", \"A2\", \"A3\"],\n",
" \"B\": [\"B0\", \"B1\", \"B2\", \"B3\"],\n",
" }\n",
" )\n",
"\n",
"right = pd.DataFrame(\n",
" {\n",
" \"key\": [\"K0\", \"K1\", \"K2\", \"K3\"],\n",
" \"C\": [\"C0\", \"C1\", \"C2\", \"C3\"],\n",
" \"D\": [\"D0\", \"D1\", \"D2\", \"D3\"],\n",
" }\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
"
\n",
" \n",
" 1 | \n",
" K1 | \n",
" A1 | \n",
" B1 | \n",
"
\n",
" \n",
" 2 | \n",
" K2 | \n",
" A2 | \n",
" B2 | \n",
"
\n",
" \n",
" 3 | \n",
" K3 | \n",
" A3 | \n",
" B3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key A B\n",
"0 K0 A0 B0\n",
"1 K1 A1 B1\n",
"2 K2 A2 B2\n",
"3 K3 A3 B3"
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"left"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K1 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" K2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" K3 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key C D\n",
"0 K0 C0 D0\n",
"1 K1 C1 D1\n",
"2 K2 C2 D2\n",
"3 K3 C3 D3"
]
},
"execution_count": 141,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"right"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K1 | \n",
" A1 | \n",
" B1 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" K2 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" K3 | \n",
" A3 | \n",
" B3 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key A B C D\n",
"0 K0 A0 B0 C0 D0\n",
"1 K1 A1 B1 C1 D1\n",
"2 K2 A2 B2 C2 D2\n",
"3 K3 A3 B3 C3 D3"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.merge(left, right, on=\"key\")\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podemos tener llaves multiples:"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [],
"source": [
"left = pd.DataFrame(\n",
" {\n",
" \"key1\": [\"K0\", \"K0\", \"K1\", \"K2\"],\n",
" \"key2\": [\"K0\", \"K1\", \"K0\", \"K1\"],\n",
" \"A\": [\"A0\", \"A1\", \"A2\", \"A3\"],\n",
" \"B\": [\"B0\", \"B1\", \"B2\", \"B3\"],\n",
" }\n",
" )\n",
" \n",
"\n",
"right = pd.DataFrame(\n",
" {\n",
" \"key1\": [\"K0\", \"K1\", \"K1\", \"K2\"],\n",
" \"key2\": [\"K0\", \"K0\", \"K0\", \"K0\"],\n",
" \"C\": [\"C0\", \"C1\", \"C2\", \"C3\"],\n",
" \"D\": [\"D0\", \"D1\", \"D2\", \"D3\"],\n",
" }\n",
" )\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key1 | \n",
" key2 | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
"
\n",
" \n",
" 1 | \n",
" K0 | \n",
" K1 | \n",
" A1 | \n",
" B1 | \n",
"
\n",
" \n",
" 2 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
"
\n",
" \n",
" 3 | \n",
" K2 | \n",
" K1 | \n",
" A3 | \n",
" B3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key1 key2 A B\n",
"0 K0 K0 A0 B0\n",
"1 K0 K1 A1 B1\n",
"2 K1 K0 A2 B2\n",
"3 K2 K1 A3 B3"
]
},
"execution_count": 144,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"left"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key1 | \n",
" key2 | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" K0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K1 | \n",
" K0 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" K1 | \n",
" K0 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" K2 | \n",
" K0 | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key1 key2 C D\n",
"0 K0 K0 C0 D0\n",
"1 K1 K0 C1 D1\n",
"2 K1 K0 C2 D2\n",
"3 K2 K0 C3 D3"
]
},
"execution_count": 145,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"right"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key1 | \n",
" key2 | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key1 key2 A B C D\n",
"0 K0 K0 A0 B0 C0 D0\n",
"1 K1 K0 A2 B2 C1 D1\n",
"2 K1 K0 A2 B2 C2 D2"
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.merge(left, right, )on=[\"key1\", \"key2\"]\n",
"\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tipos Join\n",
"\n",
"En el argumento *how* podemos especificar que tipo de join queremos efectuar:\n",
"\n",
"* left: left outer join, utilizamos las llaves del df de la izquierda\n",
"* right: right outer join, utilizamos las llaves del df de la derecha\n",
"* outer:utilizamos la union de las llaves de ambos df\n",
"* inner: utilizamos la intersección entre las dos llaves\n"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key1 | \n",
" key2 | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K0 | \n",
" K1 | \n",
" A1 | \n",
" B1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 3 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 4 | \n",
" K2 | \n",
" K1 | \n",
" A3 | \n",
" B3 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key1 key2 A B C D\n",
"0 K0 K0 A0 B0 C0 D0\n",
"1 K0 K1 A1 B1 NaN NaN\n",
"2 K1 K0 A2 B2 C1 D1\n",
"3 K1 K0 A2 B2 C2 D2\n",
"4 K2 K1 A3 B3 NaN NaN"
]
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.merge(left, right, how=\"left\", on=[\"key1\", \"key2\"])\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key1 | \n",
" key2 | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 3 | \n",
" K2 | \n",
" K0 | \n",
" NaN | \n",
" NaN | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key1 key2 A B C D\n",
"0 K0 K0 A0 B0 C0 D0\n",
"1 K1 K0 A2 B2 C1 D1\n",
"2 K1 K0 A2 B2 C2 D2\n",
"3 K2 K0 NaN NaN C3 D3"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.merge(left, right, how=\"right\", on=[\"key1\", \"key2\"])\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key1 | \n",
" key2 | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K0 | \n",
" K1 | \n",
" A1 | \n",
" B1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 3 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
" 4 | \n",
" K2 | \n",
" K1 | \n",
" A3 | \n",
" B3 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 5 | \n",
" K2 | \n",
" K0 | \n",
" NaN | \n",
" NaN | \n",
" C3 | \n",
" D3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key1 key2 A B C D\n",
"0 K0 K0 A0 B0 C0 D0\n",
"1 K0 K1 A1 B1 NaN NaN\n",
"2 K1 K0 A2 B2 C1 D1\n",
"3 K1 K0 A2 B2 C2 D2\n",
"4 K2 K1 A3 B3 NaN NaN\n",
"5 K2 K0 NaN NaN C3 D3"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.merge(left, right, how=\"outer\", on=[\"key1\", \"key2\"])\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key1 | \n",
" key2 | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" K0 | \n",
" K0 | \n",
" A0 | \n",
" B0 | \n",
" C0 | \n",
" D0 | \n",
"
\n",
" \n",
" 1 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C1 | \n",
" D1 | \n",
"
\n",
" \n",
" 2 | \n",
" K1 | \n",
" K0 | \n",
" A2 | \n",
" B2 | \n",
" C2 | \n",
" D2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" key1 key2 A B C D\n",
"0 K0 K0 A0 B0 C0 D0\n",
"1 K1 K0 A2 B2 C1 D1\n",
"2 K1 K0 A2 B2 C2 D2"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = pd.merge(left, right, how=\"inner\", on=[\"key1\", \"key2\"])\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tenemos que estar cuidados cuando tenemos indices multiples "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SQL\n",
"\n",
"### ¿Qué es SQL?\n",
"\n",
"* SQL son las siglas de Structured Query Language\n",
"* SQL permite acceder y manipular bases de datos\n",
"* SQL se convirtió en un estándar del American National Standards Institute (ANSI) en 1986, y de la International Organization for Standardization (ISO) en 1987. \n",
"* A pesar de ser estándar hay diferentes \"mutaciones\" de SQL\n",
"\n",
"### ¿Qué podemos hacer con SQL?\n",
"\n",
"* ejecutar consultas en una base de datos\n",
"* recuperar datos de una base de datos\n",
"* insertar registros en una base de datos\n",
"* actualizar registros en una base de datos\n",
"* eliminar registros de una base de datos\n",
"* crear nuevas bases de datos\n",
"* crear nuevas tablas en una base de datos\n",
"* crear procedimientos almacenados en una base de datos\n",
"* crear vistas en una base de datos\n",
"* establecer permisos en tablas, procedimientos y vistas \n",
"\n",
"### RDBMS\n",
"\n",
"RDBMS son las siglas de Relational Database Management System.\n",
"\n",
"RDBMS es la base de SQL y de todos los sistemas de bases de datos modernos como MS SQL Server, IBM DB2, Oracle, MySQL y Microsoft Access.\n",
"\n",
"Los datos en RDBMS se almacenan en objetos llamados tablas. Una tabla es una colección de entradas de datos relacionados y consta de columnas y filas. \n",
"\n",
"Cada tabla se divide en entidades más pequeñas llamadas campos. Los campos de la tabla Clientes constan de CustomerID, CustomerName, ContactName, Address, City, PostalCode y Country. Un campo es una columna de una tabla diseñada para mantener información específica sobre cada registro de la tabla.\n",
"\n",
"Un registro, también llamado fila, es cada entrada individual que existe en una tabla. Un registro es una entidad horizontal en una tabla.\n",
"\n",
"Una columna es una entidad vertical en una tabla que contiene toda la información asociada con un campo específico en una tabla. \n",
"\n",
"### Tablas\n",
"\n",
"Una base de datos suele contener una o más tablas. Cada tabla se identifica con un nombre (por ejemplo, \"Clientes\" u \"Pedidos\"). Las tablas contienen registros (filas) con datos.\n",
"\n",
"\n",
"\n",
"Tenemos 5 records y 7 campos.\n",
"\n",
"### SQL Statements\n",
"\n",
"Los statements son la sintaxis através de las cuales pedimos informaciones o modificaciones a la base de datos.\n",
"\n",
"** A diferencia que en Python los statements no son case sensitive **\n",
"\n",
" ```SELECT * FROM Customers; ```\n",
" \n",
"* ```SELECT```: extrae datos de una base de datos\n",
"* ```UPDATE```: actualiza los datos en una base de datos\n",
"* ```DELETE```: elimina datos de una base de datos\n",
"* ```INSERT INTO```: inserta nuevos datos en una base de datos\n",
"* ```CREATE DATABASE```: crea una nueva base de datos\n",
"* ```ALTER DATABASE```: modifica una base de datos\n",
"* ```CREATE TABLE```: crea una nueva tabla\n",
"* ```ALTER TABLE```: modifica una tabla\n",
"* ```DROP TABLE```:elimina una tabla\n",
"* ```CREATE INDEX```: crea un índice (clave de búsqueda)\n",
"* ```DROP INDEX```: elimina un índice \n",
"\n",
"La instrucción SELECT se utiliza para seleccionar datos de una base de datos.\n",
"\n",
"Los datos devueltos se almacenan en una tabla de resultados, denominada conjunto result set.\n",
"\n",
"```\n",
"SELECT column1, column2, ...\n",
"FROM table_name;\n",
"\n",
"SELECT * FROM table_name;\n",
"```\n",
"Si queremos seleccionar solo valores distintos utilizaremos el siguiente comando: \n",
"\n",
"```\n",
"SELECT DISTINCT column1, column2, ...\n",
"FROM table_name;\n",
"```\n",
"\n",
"Si queremos saber cuantos valores distintos tenemos para cada campo usaremos:\n",
"\n",
"```\n",
"SELECT COUNT(DISTINCT Country) FROM Customers;\n",
"```\n",
"\n",
"Cuando queremos especificar alguna condición parrticular utilizaremos el *where*:\n",
"\n",
"```\n",
"SELECT column1, column2, ...\n",
"FROM table_name\n",
"WHERE condition;\n",
"\n",
"SELECT * FROM Customers\n",
"WHERE Country='Mexico';\n",
"```\n",
"Si queremos poner una condición numerica:\n",
"\n",
"```\n",
"SELECT * FROM Customers\n",
"WHERE CustomerID=1;\n",
"```\n",
"Las condiciones que podemos utilizar son ligeramente diferente con respecto a python:\n",
"\n",
"\n",
"\n",
"La condición de *where* podemos combinarla con los operadores *AND,OR,NOT*\n",
"\n",
"\n",
"```\n",
"SELECT column1, column2, ...\n",
"FROM table_name\n",
"WHERE condition1 AND condition2 OR condition3 ...;\n",
"```\n",
"\n",
"```\n",
"SELECT column1, column2, ...\n",
"FROM table_name\n",
"WHERE NOT condition;\n",
"```\n",
"\n",
"```\n",
"SELECT * FROM Customers\n",
"WHERE Country='Germany' AND (City='Berlin' OR City='München');\n",
"```\n",
"Para ordenar nuestra tabolas de resultados podemos utilizar el *ORDER BY*:\n",
"\n",
"```\n",
"SELECT column1, column2, ...\n",
"FROM table_name\n",
"ORDER BY column1, column2, ... ASC|DESC;\n",
"```\n",
"\n",
"Podemos utilizar más de un orden como vimos en Pandas:\n",
"\n",
"```\n",
"SELECT * FROM Customers\n",
"ORDER BY Country, CustomerName;\n",
"```\n",
"para manejar los *NULL*, que son los equivalente de los NA de pandas, podemos utilziar las operadores ```IS NULL``` y ```IS NOT NULL```\n",
"\n",
"```\n",
"SELECT CustomerName, ContactName, Address\n",
"FROM Customers\n",
"WHERE Address IS NULL;\n",
"\n",
"```\n",
"\n",
"Con *UPDATE* podemos utiliactualziar los records:\n",
"\n",
"```\n",
"UPDATE Customers\n",
"SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'\n",
"WHERE CustomerID = 1;\n",
"```\n",
"\n",
"\n",
"```\n",
"SELECT COUNT(column_name)\n",
"FROM table_name\n",
"WHERE condition;\n",
"```\n",
"\n",
"\n",
"```\n",
"SELECT SUM(column_name)\n",
"FROM table_name\n",
"WHERE condition;\n",
"```\n",
"\n",
"\n",
"```\n",
"SELECT AVG(column_name)\n",
"FROM table_name\n",
"WHERE condition;\n",
"```\n",
"\n",
"Otra función muy utili es el like:\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"celltoolbar": "Edit Metadata",
"kernelspec": {
"display_name": "Python 3",
"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.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}