{ "nbformat": 4, "nbformat_minor": 0, "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" }, "colab": { "name": "kl_py_pandas_02.ipynb", "provenance": [], "collapsed_sections": [], "include_colab_link": true } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "id": "Bw4GE_218lYe", "colab_type": "text" }, "source": [ "
\n", " \n", " \n", "
\n", "\n", "\n", "\n", "\n", "# Pandas bevezető 2.\n", "\n", "https://klajosw.blogspot.com/\n", "\n", "https://github.com/klajosw/\n", "\n", "pandas: NumPy-ra épülő adatfeldolgozó és elemző eszköz\n", "\n", "---" ] }, { "cell_type": "code", "metadata": { "id": "LrahWQTJ8lYf", "colab_type": "code", "colab": {} }, "source": [ "from datetime import datetime\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "6ey1dG8c8lYj", "colab_type": "code", "outputId": "497dbe32-7e55-4a55-e820-131b5165f9cd", "colab": { "base_uri": "https://localhost:8080/", "height": 334 } }, "source": [ "# DataFrame-et létre lehet hozni szótárból...\n", "data1 = {\"a\": [1, 1, 2], \"b\": [3.0, 4.0, None]}\n", "df1 = pd.DataFrame(data1)\n", "print('Szótárból: ')\n", "print(df1)\n", "print('-----------------')\n", "\n", "# ...sztring-lista párok listájából\n", "data2 = [(\"a\", [1, 1, 2]), (\"b\", [3.0, 4.0, None])]\n", "df2 = pd.DataFrame.from_dict(dict(data2))\n", "print('String Listapárból: ')\n", "print(df2)\n", "print('-----------------')\n", "\n", "# ...szótárak listájából\n", "data3 = [{\"a\": 1, \"b\": 3}, {\"a\": 1, \"b\": 4}, {\"a\": 2}]\n", "df3 = pd.DataFrame(data3)\n", "print('Szótárak listájából: ')\n", "print(df3)\n", "print('-----------------')\n", "\n", "# ...és még számos egyéb módon\n" ], "execution_count": 5, "outputs": [ { "output_type": "stream", "text": [ "Szótárból: \n", " a b\n", "0 1 3.0\n", "1 1 4.0\n", "2 2 NaN\n", "-----------------\n", "String Listapárból: \n", " a b\n", "0 1 3.0\n", "1 1 4.0\n", "2 2 NaN\n", "-----------------\n", "Szótárak listájából: \n", " a b\n", "0 1 3.0\n", "1 1 4.0\n", "2 2 NaN\n", "-----------------\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "J3kwMblW8lYn", "colab_type": "code", "outputId": "24ce45aa-2dec-44a3-c532-29181702fb8c", "colab": { "base_uri": "https://localhost:8080/", "height": 70 } }, "source": [ "## egyszerű elem kimetszés\n", "def slices(s, *args): ## Kimetsző\n", " position = 0 ## Kezdő pozició\n", " for length in args:\n", " yield s[position:position + length] \n", "# a yield egy különleges függvény, amely időről időre értékeket állít elő, mint egy folytatható függvény, a meghívása egy generátort ad vissza\n", " \n", "print(list(slices('abcdefghijklmnopqrstuvwxyz0123456789', 2, 10, 50)))\n", "print('---------------------------')\n", "d,c,h = slices('LajosBélaAttilaFeri', 5, 4, 6)\n", "print(d,c,h)\n" ], "execution_count": 8, "outputs": [ { "output_type": "stream", "text": [ "['ab', 'abcdefghij', 'abcdefghijklmnopqrstuvwxyz0123456789']\n", "---------------------------\n", "Lajos Lajo LajosB\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "Kj3NjSMwLuOQ", "colab_type": "text" }, "source": [ "---\n", "\n", "## yield utasítás\n", "\n", "Ezt akkor használjuk, amikor egy generátor függvényt definiálunk és csak a függvény törzsében használjuk. \n", "\n", "A yield utasítás használata egy függvény definiálásánál elegendő ahhoz, hogy egy normál függvényből egy generátor függvényt készítsünk.\n", "\n", "Amikor a generátor függvényt meghívjuk, akkor visszatér egy iterátorral, amit generátor iterátornak, vagy másképp generátornak nevezünk. \n", "\n", "A generátor next() hívásának hatására a függvény törzse híváskor hajtódik végre, és addig ismétlődik, amíg egy kivételt nem vált ki.\n", "\n", "A yield utasítás végrehajtásakor, a generátor állapota fagyott lesz, és a kifejezés lista értékével tér vissza next() hívójához. \n", "\n", "\n", "---" ] }, { "cell_type": "code", "metadata": { "id": "Jwn39oZdI8L1", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 52 }, "outputId": "819809f6-f61c-488e-841c-178bf61b4214" }, "source": [ "## yield minta\n", "def fib(max):\n", " a, b = 0, 1 \n", " while a < max:\n", " yield a ## yield Generátort ad vissza, csak a meghívásakor töltődik fel \n", " a, b = b, a + b \n", "\n", "print('Fibonacci sor lista bejárása: ') \n", "for n in fib(200): ## Generátoros függvény meghívása és for ciklusban olvasása és kiírása \n", " print(n, end=' ') \n" ], "execution_count": 17, "outputs": [ { "output_type": "stream", "text": [ "Fibonacci sor lista bejárása: \n", "0 1 1 2 3 5 8 13 21 34 55 89 144 " ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "_kHeRA4T8lYp", "colab_type": "code", "outputId": "04a19c71-7c63-445f-84d1-dee29a568e98", "colab": { "base_uri": "https://localhost:8080/", "height": 52 } }, "source": [ "# minden DataFrame-hez és Series-hez tartozik index\n", "print(df1.index)\n", "# (alapértelmezés szerint az index 0-tól induló, 1-esével növekedő sorszám)\n", "\n", "# ...de természetesen mást is megadhatunk indexnek\n", "df4 = pd.DataFrame(data1, [\"xx\", \"yy\", \"zz\"])\n", "print(df4.index)\n", "\n", "#Int64Index([0, 1, 2], dtype='int64')\n", "#Index(['xx', 'yy', 'zz'], dtype='object')\n" ], "execution_count": 18, "outputs": [ { "output_type": "stream", "text": [ "RangeIndex(start=0, stop=3, step=1)\n", "Index(['xx', 'yy', 'zz'], dtype='object')\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "ImpoVp7v8lYs", "colab_type": "code", "outputId": "0f131df7-5f21-4778-e4a0-59cb1decc226", "colab": { "base_uri": "https://localhost:8080/", "height": 87 } }, "source": [ "\n", "\n", "# példák Series létrehozásra:\n", "se1 = pd.Series([2, 3, 4])\n", "se2 = pd.Series([2, 3, 4], [\"xx\", \"yy\", \"zz\"]) # a 2. argumentum az index\n", "\n", "# DataFrame-ből oszlopot [] operátorral lehet kiválasztani\n", "df1[\"a\"] # <= Series-t ad eredményül\n", "# ...illetve ha az oszlop neve érvényes azonosítónév, akkor . operátorral is\n", "df1.a # <= Series-t ad eredményül\n" ], "execution_count": 19, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 1\n", "1 1\n", "2 2\n", "Name: a, dtype: int64" ] }, "metadata": { "tags": [] }, "execution_count": 19 } ] }, { "cell_type": "code", "metadata": { "id": "Y0WfqCDk8lYv", "colab_type": "code", "outputId": "33bb0e79-e183-486a-b3b3-2ae46dbed343", "colab": { "base_uri": "https://localhost:8080/", "height": 106 } }, "source": [ "# DataFrame-ből sort a .iloc attribútumon keresztül lehet kiválasztani\n", "df1.iloc[0] # <= ez is Series-t ad eredményül\n", "df1.iloc[[1, 0]] # <= DataFrame-et ad eredményül, mivel 2 sort választottunk ki" ], "execution_count": 20, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", " | a | \n", "b | \n", "
---|---|---|
1 | \n", "1 | \n", "4.0 | \n", "
0 | \n", "1 | \n", "3.0 | \n", "