{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true, "pycharm": { "name": "#%% md\n" } }, "source": [ "# Pyjanitor" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "可以将如下代码注释后并执行安装 Pyjanitor" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "#!pip install pyjanitor" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import janitor\n", "\n", "# or use `as` key word to set an alias.\n", "import janitor as jn" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ab231_
01a
13b
23c
\n", "
" ], "text/plain": [ " a b231_\n", "0 1 a\n", "1 3 b\n", "2 3 c" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import janitor as jn\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"a\": [1, 3, 3],\n", " \"b$231@!#_\": list(\"abc\"),\n", " }\n", ")\n", "data.head()\n", "data.pipe(jn.clean_names, remove_special=True)\n", "data.clean_names(remove_special=True)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "## coalesce" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ab
01<NA>
1<NA>1.3
23<NA>
3<NA><NA>
\n", "
" ], "text/plain": [ " a b\n", "0 1 \n", "1 1.3\n", "2 3 \n", "3 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# native pandas code\n", "\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"a\": [1, pd.NA, 3, pd.NA],\n", " \"b\": [pd.NA, 1.3, pd.NA, pd.NA],\n", " }\n", ")\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def use_or_not(row):\n", " a, b = pd.isna(row[\"a\"]), pd.isna(row[\"b\"])\n", " if a and not b:\n", " return row[\"b\"]\n", " elif not a and b:\n", " return row[\"a\"]\n", " else:\n", " return pd.NA" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
01<NA>1
1<NA>1.31.3
23<NA>3
3<NA><NA><NA>
\n", "
" ], "text/plain": [ " a b c\n", "0 1 1\n", "1 1.3 1.3\n", "2 3 3\n", "3 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[\"c\"] = data.apply(use_or_not, axis=1)\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
01<NA>1
1<NA>1.31.3
23<NA>3
3<NA><NA><NA>
\n", "
" ], "text/plain": [ " a b c\n", "0 1 1\n", "1 1.3 1.3\n", "2 3 3\n", "3 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# janitor code\n", "import janitor\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"a\": [1, pd.NA, 3, pd.NA],\n", " \"b\": [pd.NA, 1.3, pd.NA, pd.NA],\n", " \"c\": [3, pd.NA, 2, 3.1],\n", " }\n", ")\n", "data.coalesce(\"a\", \"b\", target_column_name=\"c\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
01<NA>3
1<NA>1.3<NA>
23<NA>2
3<NA><NA>3.1
\n", "
" ], "text/plain": [ " a b c\n", "0 1 3\n", "1 1.3 \n", "2 3 2\n", "3 3.1" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# DataFrame.bfill\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"a\": [1, pd.NA, 3, pd.NA],\n", " \"b\": [pd.NA, 1.3, pd.NA, pd.NA],\n", " \"c\": [3, pd.NA, 2, 3.1],\n", " }\n", ")\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ab
01<NA>
11.31.3
23<NA>
3<NA><NA>
\n", "
" ], "text/plain": [ " a b\n", "0 1 \n", "1 1.3 1.3\n", "2 3 \n", "3 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.filter([\"a\", \"b\"]).bfill(axis=1)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
01.03.03
11.31.3<NA>
23.02.02
33.13.13.1
\n", "
" ], "text/plain": [ " a b c\n", "0 1.0 3.0 3\n", "1 1.3 1.3 \n", "2 3.0 2.0 2\n", "3 3.1 3.1 3.1" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.filter([\"a\", \"b\", \"c\"]).bfill(axis=1)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "0 1.0\n", "1 1.3\n", "2 3.0\n", "3 3.1\n", "Name: a, dtype: float64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.filter([\"a\", \"b\", \"c\"]).bfill(axis=1).iloc[:, 0]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "## case_when" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# native pandas code\n", "import pandas as pd\n", "\n", "df = pd.DataFrame(\n", " {\n", " \"a\": [0, 0, 1, 2, \"hi\"],\n", " \"b\": [0, 3, 4, 5, \"bye\"],\n", " \"c\": [6, 7, 8, 9, \"wait\"],\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def case_when(row):\n", " if (row[\"a\"] == 0 and row[\"b\"] != 0) or row[\"c\"] == \"wait\":\n", " return row[\"a\"]\n", " elif row[\"a\"] == 0 and row[\"b\"] == 0:\n", " return \"x\"\n", " else:\n", " return row[\"c\"]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abcnew_col
0006x
10370
21488
32599
4hibyewaithi
\n", "
" ], "text/plain": [ " a b c new_col\n", "0 0 0 6 x\n", "1 0 3 7 0\n", "2 1 4 8 8\n", "3 2 5 9 9\n", "4 hi bye wait hi" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.assign(new_col=df.apply(case_when, axis=1))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
0006
1037
2148
3259
4hibyewait
\n", "
" ], "text/plain": [ " a b c\n", "0 0 0 6\n", "1 0 3 7\n", "2 1 4 8\n", "3 2 5 9\n", "4 hi bye wait" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# janitor code\n", "import janitor\n", "import pandas as pd\n", "\n", "df = pd.DataFrame(\n", " {\n", " \"a\": [0, 0, 1, 2, \"hi\"],\n", " \"b\": [0, 3, 4, 5, \"bye\"],\n", " \"c\": [6, 7, 8, 9, \"wait\"],\n", " }\n", ")\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abcnew_col
0006x
10370
21488
32599
4hibyewaithi
\n", "
" ], "text/plain": [ " a b c new_col\n", "0 0 0 6 x\n", "1 0 3 7 0\n", "2 1 4 8 8\n", "3 2 5 9 9\n", "4 hi bye wait hi" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# fmt:off\n", "df.case_when(\n", " ((df.a == 0) & (df.b != 0)) | (df.c == \"wait\"), df.a,\n", " (df.b == 0) & (df.a == 0), \"x\",\n", " df.c,\n", " column_name=\"new_col\",\n", ")\n", "# fmt:on" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "## concatenate_columns & deconcatenate_column" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
no.prefixbase
01automatic
12decode
23embody
\n", "
" ], "text/plain": [ " no. prefix base\n", "0 1 auto matic\n", "1 2 de code\n", "2 3 em body" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# native pandas code\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"no.\": [1, 2, 3],\n", " \"prefix\": [\"auto\", \"de\", \"em\"],\n", " \"base\": [\"matic\", \"code\", \"body\"],\n", " }\n", ")\n", "\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "0 auto-matic\n", "1 de-code\n", "2 em-body\n", "Name: prefix, dtype: object" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[\"prefix\"].str.cat(data[\"base\"], sep=\"-\")" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "0 auto-matic\n", "1 de-code\n", "2 em-body\n", "dtype: object" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[\"prefix\"] + \"-\" + data[\"base\"]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "0 1-auto-matic\n", "1 2-de-code\n", "2 3-em-body\n", "Name: no., dtype: object" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(\n", " data[\"no.\"]\n", " .astype(str)\n", " .str.cat(data[\"prefix\"], sep=\"-\")\n", " .str.cat(data[\"base\"], sep=\"-\")\n", ")" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
no.prefixbaseword
01automatic1-auto-matic
12decode2-de-code
23embody3-em-body
\n", "
" ], "text/plain": [ " no. prefix base word\n", "0 1 auto matic 1-auto-matic\n", "1 2 de code 2-de-code\n", "2 3 em body 3-em-body" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# janitor code\n", "import janitor\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"no.\": [1, 2, 3],\n", " \"prefix\": [\"auto\", \"de\", \"em\"],\n", " \"base\": [\"matic\", \"code\", \"body\"],\n", " }\n", ")\n", "data.concatenate_columns(\n", " column_names=[\"no.\", \"prefix\", \"base\"],\n", " new_column_name=\"word\",\n", ")" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateyearmonthdayyear_month
02022-01-0220220102202201
12022-01-0920220109202201
22022-01-1620220116202201
32022-01-2320220123202201
42022-01-3020220130202201
\n", "
" ], "text/plain": [ " date year month day year_month\n", "0 2022-01-02 2022 01 02 202201\n", "1 2022-01-09 2022 01 09 202201\n", "2 2022-01-16 2022 01 16 202201\n", "3 2022-01-23 2022 01 23 202201\n", "4 2022-01-30 2022 01 30 202201" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import janitor\n", "import pandas as pd\n", "(\n", " pd.DataFrame({\"date\": pd.date_range(\"20220101\", \"20220201\", freq=\"1W\")})\n", " .astype(str)\n", " .deconcatenate_column(\"date\", new_column_names=[\"year\", \"month\", \"day\"], sep=\"-\")\n", " .assign(year_month=lambda df: df[\"year\"].str.cat(df[\"month\"], sep=\"\"))\n", ")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "## join_apply" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ab
012
134
256
\n", "
" ], "text/plain": [ " a b\n", "0 1 2\n", "1 3 4\n", "2 5 6" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# native pandas code\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"a\": [1, 3, 5],\n", " \"b\": [2, 4, 6],\n", " }\n", ")\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
0121.333333
1343.333333
2565.333333
\n", "
" ], "text/plain": [ " a b c\n", "0 1 2 1.333333\n", "1 3 4 3.333333\n", "2 5 6 5.333333" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.assign(c=lambda df: df.apply(lambda row: (row[\"a\"] * 2 + row[\"b\"]) / 3, axis=1))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
0121.333333
1343.333333
2565.333333
\n", "
" ], "text/plain": [ " a b c\n", "0 1 2 1.333333\n", "1 3 4 3.333333\n", "2 5 6 5.333333" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# equal this:\n", "data.assign(\n", " c=(data[\"a\"]*2+data[\"b\"])/3\n", ")" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abc
0121.333333
1343.333333
2565.333333
\n", "
" ], "text/plain": [ " a b c\n", "0 1 2 1.333333\n", "1 3 4 3.333333\n", "2 5 6 5.333333" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# janitor code\n", "import janitor\n", "import pandas as pd\n", "\n", "data = pd.DataFrame(\n", " {\n", " \"a\": [1, 3, 5],\n", " \"b\": [2, 4, 6],\n", " }\n", ")\n", "\n", "data.join_apply(lambda row: (row[\"a\"] * 2 + row[\"b\"]) / 3, new_column_name=\"c\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.4 ('sspai-100-hours-series-python')", "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.10.4" }, "vscode": { "interpreter": { "hash": "7a101baf08afe636412f97dd4a9fc2e65b6f84f0ec50413bf3e19b04a26b8ba6" } } }, "nbformat": 4, "nbformat_minor": 0 }