{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "view-in-github" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "g05kSZSuyD8r" }, "source": [ "# Pandasの使い方 (基礎)" ] }, { "cell_type": "markdown", "metadata": { "id": "NnDUb09nyHXf" }, "source": [ "```Pandas```は、データ分析のためのライブラリで \n", "統計量を計算・表示したり、それらをグラフとして可視化出来たり \n", "前処理などの地道だが重要な作業を比較的簡単に行うことができる。\n", "\n", "まずはインポートしよう。```pd```という名前で使うのが慣例。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "G0LxApMex5f6" }, "outputs": [], "source": [ "import pandas as pd " ] }, { "cell_type": "markdown", "metadata": { "id": "q-qC7xkDhU5A" }, "source": [ "pandasでは主に`Series`と`DataFrame`の2つのオブジェクトを扱う。 \n", "`Series`は`DataFrame`の特殊な場合とみなせるので、以下では`DataFrame`のみ説明することにします。" ] }, { "cell_type": "markdown", "metadata": { "id": "-1ut22WgzFeQ" }, "source": [ "## DataFrame型" ] }, { "cell_type": "markdown", "metadata": { "id": "A-RriyHt1r-p" }, "source": [ "`DataFrame`はExcelシートのような二次元のデータを表現するのに利用され各種データ分析などで非常に役に立つ。" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "Ubw2JSMmzCkX" }, "outputs": [], "source": [ "from pandas import DataFrame" ] }, { "cell_type": "markdown", "metadata": { "id": "oeBpZK4l7knI" }, "source": [ "以下の辞書型をDataFrameのオブジェクトに変換してみましょう。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "HKPVuPjz7jmb" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dataの型 \n", "dfの型 \n" ] } ], "source": [ "data = { '名前': [\"Aさん\", \"Bさん\", \"Cさん\", \"Dさん\", \"Eさん\"],\n", " '出身都道府県':['Tokyo', 'Tochigi', 'Hokkaido','Kyoto','Tochigi'],\n", " '生年': [ 1998, 1993,2000,1989,2002],\n", " '身長': [172, 156, 162, 180,158]}\n", "df = DataFrame(data)\n", "print(\"dataの型\", type(data))\n", "print(\"dfの型\",type(df))" ] }, { "cell_type": "markdown", "metadata": { "id": "5F90_vjr8ukA" }, "source": [ "jupyter環境でDataFrameをコードセルの最終行に書くと、\"いい感じ\"に表示してくれる" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "8VZZ6asj8qie" }, "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", "
名前出身都道府県生年身長
0AさんTokyo1998172
1BさんTochigi1993156
2CさんHokkaido2000162
3DさんKyoto1989180
4EさんTochigi2002158
\n", "
" ], "text/plain": [ " 名前 出身都道府県 生年 身長\n", "0 Aさん Tokyo 1998 172\n", "1 Bさん Tochigi 1993 156\n", "2 Cさん Hokkaido 2000 162\n", "3 Dさん Kyoto 1989 180\n", "4 Eさん Tochigi 2002 158" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": { "id": "BkqFef0A83To" }, "source": [ "printだとちょっと無機質な感じに。" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "id": "xiIqLRFG82BW" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 名前 出身都道府県 生年 身長\n", "0 Aさん Tokyo 1998 172\n", "1 Bさん Tochigi 1993 156\n", "2 Cさん Hokkaido 2000 162\n", "3 Dさん Kyoto 1989 180\n", "4 Eさん Tochigi 2002 158\n" ] } ], "source": [ "print(df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "単一のコードセルの途中でDataFrameを表示したい場合などは、`display`関数を使うと良い。" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "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", "
名前出身都道府県生年身長
0AさんTokyo1998172
1BさんTochigi1993156
2CさんHokkaido2000162
3DさんKyoto1989180
4EさんTochigi2002158
\n", "
" ], "text/plain": [ " 名前 出身都道府県 生年 身長\n", "0 Aさん Tokyo 1998 172\n", "1 Bさん Tochigi 1993 156\n", "2 Cさん Hokkaido 2000 162\n", "3 Dさん Kyoto 1989 180\n", "4 Eさん Tochigi 2002 158" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(df)" ] }, { "cell_type": "markdown", "metadata": { "id": "vn8s-8VR7b6Q" }, "source": [ "```info()```関数を作用させると、詳細な情報が得られる。 \n", "列ごとにどんな種類のデータが格納されているのかや、\n", "メモリ使用量など表示することができる。" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "2KsTF1d17anv" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 5 entries, 0 to 4\n", "Data columns (total 4 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 名前 5 non-null object\n", " 1 出身都道府県 5 non-null object\n", " 2 生年 5 non-null int64 \n", " 3 身長 5 non-null int64 \n", "dtypes: int64(2), object(2)\n", "memory usage: 292.0+ bytes\n" ] } ], "source": [ "df.info()" ] }, { "cell_type": "markdown", "metadata": { "id": "-TsUcNTsBIIi" }, "source": [ "## DataFrameの要素を確認・指定する方法" ] }, { "cell_type": "markdown", "metadata": { "id": "6ChkvnngBLb_" }, "source": [ "`index`: 行方向のデータ項目(おもに整数値(行番号),ID,名前など) \n", "`columns`: 列方向のデータの項目(おもにデータの種類) \n", "をそれぞれ表示してみよう。" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "YkQCL0ay59o8" }, "outputs": [ { "data": { "text/plain": [ "RangeIndex(start=0, stop=5, step=1)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "id": "WNqLrkQ35-4O" }, "outputs": [ { "data": { "text/plain": [ "Index(['名前', '出身都道府県', '生年', '身長'], dtype='object')" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "markdown", "metadata": { "id": "-MtegVlt60qr" }, "source": [ "行方向を、整数値(行数)ではなく名前にしたければ" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "aE51PtdW6pKE" }, "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", "
出身都道府県生年身長
AさんTokyo1998172
BさんTochigi1993156
CさんHokkaido2000162
DさんKyoto1989180
EさんTochigi2002158
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長\n", "Aさん Tokyo 1998 172\n", "Bさん Tochigi 1993 156\n", "Cさん Hokkaido 2000 162\n", "Dさん Kyoto 1989 180\n", "Eさん Tochigi 2002 158" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1 = {'出身都道府県':['Tokyo', 'Tochigi', 'Hokkaido','Kyoto','Tochigi'],\n", " '生年': [ 1998, 1993,2000,1989,2002],\n", " '身長': [172, 156, 162, 180,158]}\n", "df = DataFrame(data1)\n", "df.index =[\"Aさん\", \"Bさん\", \"Cさん\", \"Dさん\", \"Eさん\"]\n", "df" ] }, { "cell_type": "markdown", "metadata": { "id": "LaFJVeL27NqY" }, "source": [ "などとしてもよい。" ] }, { "cell_type": "markdown", "metadata": { "id": "_uFFuzQM8FoQ" }, "source": [ "### 特定の列を取得したい場合" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "id": "oQ9hZkVx8K-p" }, "outputs": [ { "data": { "text/plain": [ "Aさん 172\n", "Bさん 156\n", "Cさん 162\n", "Dさん 180\n", "Eさん 158\n", "Name: 身長, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"身長\"]" ] }, { "cell_type": "markdown", "metadata": { "id": "zn3WJ4_5946D" }, "source": [ "と列名を指定すればよい。 \n", "以下の方法でも取得できるが、この授業では非推奨とする。\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "id": "3VyUAqQs9596" }, "outputs": [ { "data": { "text/plain": [ "Aさん 172\n", "Bさん 156\n", "Cさん 162\n", "Dさん 180\n", "Eさん 158\n", "Name: 身長, dtype: int64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.身長" ] }, { "cell_type": "markdown", "metadata": { "id": "uK8zkK3h8cpY" }, "source": [ "値のリスト(正確にはnumpy.ndarray型)として取得したければ" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "id": "tozKlT028hfi" }, "outputs": [ { "data": { "text/plain": [ "array([172, 156, 162, 180, 158])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"身長\"].values" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "id": "87TOA6-e8j8v" }, "outputs": [ { "data": { "text/plain": [ "array(['Tokyo', 'Tochigi', 'Hokkaido', 'Kyoto', 'Tochigi'], dtype=object)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"出身都道府県\"].values" ] }, { "cell_type": "markdown", "metadata": { "id": "Yh97e7y58yHY" }, "source": [ "などとすればよい。\n", "\n", "慣れ親しんだ形に変換したければ、リストに変換すればよい\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "id": "2Uh6YGih5FjE" }, "outputs": [ { "data": { "text/plain": [ "['Tokyo', 'Tochigi', 'Hokkaido', 'Kyoto', 'Tochigi']" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(df[\"出身都道府県\"].values)" ] }, { "cell_type": "markdown", "metadata": { "id": "WfpujEkA5BSD" }, "source": [ "ある列が特定のものに一致するもののみを抽出するのも簡単にできる" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "id": "qlFGoUdc8zPn" }, "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", "
出身都道府県生年身長
BさんTochigi1993156
EさんTochigi2002158
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長\n", "Bさん Tochigi 1993 156\n", "Eさん Tochigi 2002 158" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df[\"出身都道府県\"]==\"Tochigi\"]" ] }, { "cell_type": "markdown", "metadata": { "id": "ItbqbBdn9HG0" }, "source": [ "これは" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "id": "Ubs3Zbjj9KA9" }, "outputs": [ { "data": { "text/plain": [ "Aさん False\n", "Bさん True\n", "Cさん False\n", "Dさん False\n", "Eさん True\n", "Name: 出身都道府県, dtype: bool" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"出身都道府県\"]==\"Tochigi\"" ] }, { "cell_type": "markdown", "metadata": { "id": "bUB1Puao9LqO" }, "source": [ "が条件に合致するかどうかTrue/Falseの配列(正確には`Series`)になっていて、 \n", "df[ [True/Falseの配列] ]とすると、Trueに対応する要素のみを返すフィルターのような役割になっている。" ] }, { "cell_type": "markdown", "metadata": { "id": "4xcTwpmcf3WK" }, "source": [ "### 列の追加" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "id": "Hznr0hZMghcK" }, "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", "
出身都道府県生年身長血液型
AさんTokyo1998172A
BさんTochigi1993156A
CさんHokkaido2000162A
DさんKyoto1989180A
EさんTochigi2002158A
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長 血液型\n", "Aさん Tokyo 1998 172 A\n", "Bさん Tochigi 1993 156 A\n", "Cさん Hokkaido 2000 162 A\n", "Dさん Kyoto 1989 180 A\n", "Eさん Tochigi 2002 158 A" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#スカラー値の場合\"初期化\"のような振る舞いをする\n", "df[\"血液型\"] = \"A\"\n", "df" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "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", "
出身都道府県生年身長血液型
AさんTokyo1998172B
BさんTochigi1993156B
CさんHokkaido2000162B
DさんKyoto1989180B
EさんTochigi2002158B
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長 血液型\n", "Aさん Tokyo 1998 172 B\n", "Bさん Tochigi 1993 156 B\n", "Cさん Hokkaido 2000 162 B\n", "Dさん Kyoto 1989 180 B\n", "Eさん Tochigi 2002 158 B" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"血液型\"] = \"B\"\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "リストや`numpy.ndarray`を列として追加することができる。" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "id": "1ved-4XAgMvq" }, "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", "
出身都道府県生年身長血液型
AさんTokyo1998172A
BさんTochigi1993156O
CさんHokkaido2000162AB
DさんKyoto1989180B
EさんTochigi2002158A
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長 血液型\n", "Aさん Tokyo 1998 172 A\n", "Bさん Tochigi 1993 156 O\n", "Cさん Hokkaido 2000 162 AB\n", "Dさん Kyoto 1989 180 B\n", "Eさん Tochigi 2002 158 A" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#リストで追加\n", "df[\"血液型\"] = [ \"A\", \"O\",\"AB\",\"B\",\"A\"]\n", "df" ] }, { "cell_type": "markdown", "metadata": { "id": "S_I81w5L-UOE" }, "source": [ "### 特定の行を取得したい場合" ] }, { "cell_type": "markdown", "metadata": { "id": "he5uTk3H-kMs" }, "source": [ "たとえば、行番号がわかっているなら、```iloc```関数を使えば良い" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "kbxrpQ1E-k8F" }, "outputs": [ { "data": { "text/plain": [ "出身都道府県 Kyoto\n", "生年 1989\n", "身長 180\n", "血液型 B\n", "Name: Dさん, dtype: object" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[3]" ] }, { "cell_type": "markdown", "metadata": { "id": "2998C5BK_Wut" }, "source": [ "値のみ取得したければ先程と同様`values`で`numpy.ndarray`を取得できる" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "id": "6HoJX4h__Uj3" }, "outputs": [ { "data": { "text/plain": [ "array(['Kyoto', 1989, 180, 'B'], dtype=object)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[3].values" ] }, { "cell_type": "markdown", "metadata": { "id": "4gwiSube_ax9" }, "source": [ "また、以下のような使い方もできるが" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "id": "4oabG7uA-TyS" }, "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", "
出身都道府県生年身長血液型
BさんTochigi1993156O
CさんHokkaido2000162AB
DさんKyoto1989180B
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長 血液型\n", "Bさん Tochigi 1993 156 O\n", "Cさん Hokkaido 2000 162 AB\n", "Dさん Kyoto 1989 180 B" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[1:4] " ] }, { "cell_type": "markdown", "metadata": { "id": "hbFfX303_eVc" }, "source": [ "```df[1]```といった使い方は出来ず、KeyErrorが発生する、" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "1", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pandas/core/indexes/base.py:3805\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3804\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3805\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", "File \u001b[0;32mindex.pyx:167\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mindex.pyx:196\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7081\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7089\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 1", "\nThe above exception was the direct cause of the following exception:\n", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[24], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdf\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\n", "File \u001b[0;32m~/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pandas/core/frame.py:4102\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 4100\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 4101\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 4102\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4103\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 4104\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", "File \u001b[0;32m~/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pandas/core/indexes/base.py:3812\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3807\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(casted_key, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;28misinstance\u001b[39m(casted_key, abc\u001b[38;5;241m.\u001b[39mIterable)\n\u001b[1;32m 3809\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(x, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m casted_key)\n\u001b[1;32m 3810\u001b[0m ):\n\u001b[1;32m 3811\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[0;32m-> 3812\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3813\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3814\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3815\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3816\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3817\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", "\u001b[0;31mKeyError\u001b[0m: 1" ] } ], "source": [ "df[1]" ] }, { "cell_type": "markdown", "metadata": { "id": "oH1A89pw_s6b" }, "source": [ "### より複雑な行・列の抽出" ] }, { "cell_type": "markdown", "metadata": { "id": "vxd7k3f3AJjj" }, "source": [ "上にならって、2000年より前に生まれた人だけを抽出し" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "id": "rDrnJUg9_w1Q" }, "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", "
出身都道府県生年身長血液型
AさんTokyo1998172A
BさんTochigi1993156O
DさんKyoto1989180B
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長 血液型\n", "Aさん Tokyo 1998 172 A\n", "Bさん Tochigi 1993 156 O\n", "Dさん Kyoto 1989 180 B" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[ df[\"生年\"] < 2000 ]" ] }, { "cell_type": "markdown", "metadata": { "id": "iZrMq16v__fV" }, "source": [ "さらにこのうち身長が170cm以上の人だけがほしければ" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "id": "d6q2DR7nAYEv" }, "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", "
出身都道府県生年身長血液型
AさんTokyo1998172A
DさんKyoto1989180B
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長 血液型\n", "Aさん Tokyo 1998 172 A\n", "Dさん Kyoto 1989 180 B" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[(df[\"生年\"] < 2000) & (df[\"身長\"]>170)]" ] }, { "cell_type": "markdown", "metadata": { "id": "-b36txVaA7fQ" }, "source": [ "などとすればよい。**複数条件の場合は、条件を()で囲む必要があることに注意**しよう。\n", "\n", "他にも```iloc```,```loc```などを用いれば、特定の行・列を抽出することができる\n", "\n", "* ```iloc```は番号の指定のみに対応\n", "* ```loc```は名前(列名・行明)のみ\n", "\n", "**欲しい要素の数値もしくは項目名のリスト**を行・列のそれぞれについて指定してやればよい。" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "id": "xZhc6nlDBXJH" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
出身都道府県
AさんTokyo
\n", "
" ], "text/plain": [ " 出身都道府県\n", "Aさん Tokyo" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[[0], [0]] #0行目,0列目" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "id": "i-W-XTw9Bz5-" }, "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", "
出身都道府県生年身長
BさんTochigi1993156
CさんHokkaido2000162
DさんKyoto1989180
\n", "
" ], "text/plain": [ " 出身都道府県 生年 身長\n", "Bさん Tochigi 1993 156\n", "Cさん Hokkaido 2000 162\n", "Dさん Kyoto 1989 180" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#スライスで指定することもできる\n", "df.iloc[1:4, :3] #1-3行目かつ0-2列目 (スライスの終点は含まれないことに注意)\n", "#スライスの場合は、 1:4が[1,2,3]と同じ働きをするので、括弧[]はいらない" ] }, { "cell_type": "markdown", "metadata": { "id": "acMQBcZw5hmv" }, "source": [ "```loc```を使う場合は、indexの代わりに項目名で指定する。" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "id": "JLlD6iUvCH-q" }, "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", "
出身都道府県身長
AさんTokyo172
CさんHokkaido162
\n", "
" ], "text/plain": [ " 出身都道府県 身長\n", "Aさん Tokyo 172\n", "Cさん Hokkaido 162" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[[\"Aさん\",\"Cさん\"],[\"出身都道府県\",\"身長\"]] " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "スライス的に指定することもできる" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "id": "y3rZAq4rCTSh" }, "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", "
出身都道府県生年
BさんTochigi1993
CさんHokkaido2000
DさんKyoto1989
\n", "
" ], "text/plain": [ " 出身都道府県 生年\n", "Bさん Tochigi 1993\n", "Cさん Hokkaido 2000\n", "Dさん Kyoto 1989" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[\"Bさん\":\"Dさん\",\"出身都道府県\":\"生年\"]" ] }, { "cell_type": "markdown", "metadata": { "id": "WzV2r0oPA82E" }, "source": [ "といった具合。\n", "\n", "```loc```を使う場合、1:4や[1,2,3,4]はindexのスライスではなく、 \n", "項目名を意味し、Eさんのデータも含まれている事がわかる。" ] }, { "cell_type": "markdown", "metadata": { "id": "py5Dt6wY10pB" }, "source": [ "## Webページにある表をDataFrameとして取得する" ] }, { "cell_type": "markdown", "metadata": { "id": "s7XShK0B15-t" }, "source": [ "```pandas```内の```read_html```関数を用いれば、 \n", "Webページの中にある表をDataFrame形式で取得することもできます。\n", "\n", "以下では例としてWikipediaの[ノーベル物理学賞](https://ja.wikipedia.org/wiki/%e3%83%8e%e3%83%bc%e3%83%99%e3%83%ab%e7%89%a9%e7%90%86%e5%ad%a6%e8%b3%9e)のページにある、受賞者一覧を取得してみましょう" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "id": "WQG0tt0q2Hj-" }, "outputs": [], "source": [ "url = \"https://ja.wikipedia.org/wiki/%e3%83%8e%e3%83%bc%e3%83%99%e3%83%ab%e7%89%a9%e7%90%86%e5%ad%a6%e8%b3%9e\"\n", "tables = pd.read_html(url)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "表の数を数えてみると..." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "id": "xLVtylYB2Uow" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "18\n" ] } ], "source": [ "print(len(tables))" ] }, { "cell_type": "markdown", "metadata": { "id": "yBghdSUU2XdQ" }, "source": [ "ページ内に、18個もの表があることがわかります。(ほとんどはwikipediaのテンプレート等)\n", "\n", "たとえば、2010年代の受賞者のみに興味がある場合は" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "id": "nf2JwszO2nBM" }, "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", " \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", " \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", " \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", " \n", " \n", " \n", "
年度受賞者名受賞者名.1国籍受賞理由[4]・原著ないし関連論文
02010年NaNアンドレ・ガイム Andre Geimオランダ ( ロシア出身)二次元物質グラフェンに関する革新的実験[注 71]
12010年NaNコンスタンチン・ノボセロフ Konstantin Novoselovロシア イギリス二次元物質グラフェンに関する革新的実験[注 71]
22011年NaNソール・パールマッター Saul Perlmutterアメリカ合衆国遠方の超新星の観測を通した宇宙の加速膨張の発見 Astrophys. J.: 517 (19...
32011年NaNブライアン・P・シュミット Brian Schmidtオーストラリア アメリカ合衆国遠方の超新星の観測を通した宇宙の加速膨張の発見 Astrophys. J.: 517 (19...
42011年NaNアダム・リース Adam Riessアメリカ合衆国遠方の超新星の観測を通した宇宙の加速膨張の発見 Astrophys. J.: 517 (19...
52012年NaNセルジュ・アロシュ Serge Harocheフランス ( モロッコ出身)個別の量子系に対する計測および制御[注 72]を可能にする画期的な実験的手法に関する業績[5...
62012年NaNデービッド・ワインランド David J. Winelandアメリカ合衆国個別の量子系に対する計測および制御[注 72]を可能にする画期的な実験的手法に関する業績[5...
72013年NaNフランソワ・アングレール François Englertベルギー欧州原子核研究機構 (CERN) によって存在が確認された素粒子(ヒッグス粒子)に基づく、質...
82013年NaNピーター・ヒッグス Peter Higgsイギリス欧州原子核研究機構 (CERN) によって存在が確認された素粒子(ヒッグス粒子)に基づく、質...
92014年NaN赤﨑勇 Isamu Akasaki日本高輝度で省電力の白色光源を実現可能にした青色発光ダイオードの発明[10]
102014年NaN天野浩 Hiroshi Amano日本高輝度で省電力の白色光源を実現可能にした青色発光ダイオードの発明[10]
112014年NaN中村修二 Shuji Nakamuraアメリカ合衆国 ( 日本出身)高輝度で省電力の白色光源を実現可能にした青色発光ダイオードの発明[10]
122015年NaN梶田隆章 Takaaki Kajita日本素粒子「ニュートリノ」が質量を持つことを示すニュートリノ振動の発見[11] Nucl. Ph...
132015年NaNアーサー・B・マクドナルド Arthur B. McDonaldカナダ素粒子「ニュートリノ」が質量を持つことを示すニュートリノ振動の発見[11] Nucl. Ph...
142016年NaNデイヴィッド・J・サウレス David J. Thoulessイギリス アメリカ合衆国物質のトポロジカル相とトポロジカル相転移の理論的発見[12][13]
152016年NaNダンカン・ホールデン Duncan Haldaneイギリス スロベニア物質のトポロジカル相とトポロジカル相転移の理論的発見[12][13]
162016年NaNジョン・M・コステリッツ Michael Kosterlitzイギリス アメリカ合衆国物質のトポロジカル相とトポロジカル相転移の理論的発見[12][13]
172017年NaNレイナー・ワイス Rainer Weissアメリカ合衆国 ( ドイツ出身)LIGO検出器および重力波の観測への決定的な貢献
182017年NaNバリー・バリッシュ Barry Barishアメリカ合衆国LIGO検出器および重力波の観測への決定的な貢献
192017年NaNキップ・ソーン Kip Thorneアメリカ合衆国LIGO検出器および重力波の観測への決定的な貢献
202018年NaNアーサー・アシュキン Arthur Ashkinアメリカ合衆国光ピンセットの開発と生体システムへの応用
212018年NaNジェラール・ムル Gérard Mourouフランス超高出力・超短パルスレーザーの生成方法の開発
222018年NaNドナ・ストリックランド Donna Stricklandカナダ超高出力・超短パルスレーザーの生成方法の開発
232019年NaNジェームズ・ピーブルス Jim Peeblesアメリカ合衆国 ( カナダ出身)物理宇宙論における理論的発見
242019年NaNミシェル・マイヨール Michel Mayorスイス太陽型恒星を周回する太陽系外惑星の発見
252019年NaNディディエ・ケロー Didier Quelozスイス太陽型恒星を周回する太陽系外惑星の発見
\n", "
" ], "text/plain": [ " 年度 受賞者名 受賞者名.1 国籍 \\\n", "0 2010年 NaN アンドレ・ガイム Andre Geim オランダ ( ロシア出身) \n", "1 2010年 NaN コンスタンチン・ノボセロフ Konstantin Novoselov ロシア イギリス \n", "2 2011年 NaN ソール・パールマッター Saul Perlmutter アメリカ合衆国 \n", "3 2011年 NaN ブライアン・P・シュミット Brian Schmidt オーストラリア アメリカ合衆国 \n", "4 2011年 NaN アダム・リース Adam Riess アメリカ合衆国 \n", "5 2012年 NaN セルジュ・アロシュ Serge Haroche フランス ( モロッコ出身) \n", "6 2012年 NaN デービッド・ワインランド David J. Wineland アメリカ合衆国 \n", "7 2013年 NaN フランソワ・アングレール François Englert ベルギー \n", "8 2013年 NaN ピーター・ヒッグス Peter Higgs イギリス \n", "9 2014年 NaN 赤﨑勇 Isamu Akasaki 日本 \n", "10 2014年 NaN 天野浩 Hiroshi Amano 日本 \n", "11 2014年 NaN 中村修二 Shuji Nakamura アメリカ合衆国 ( 日本出身) \n", "12 2015年 NaN 梶田隆章 Takaaki Kajita 日本 \n", "13 2015年 NaN アーサー・B・マクドナルド Arthur B. McDonald カナダ \n", "14 2016年 NaN デイヴィッド・J・サウレス David J. Thouless イギリス アメリカ合衆国 \n", "15 2016年 NaN ダンカン・ホールデン Duncan Haldane イギリス スロベニア \n", "16 2016年 NaN ジョン・M・コステリッツ Michael Kosterlitz イギリス アメリカ合衆国 \n", "17 2017年 NaN レイナー・ワイス Rainer Weiss アメリカ合衆国 ( ドイツ出身) \n", "18 2017年 NaN バリー・バリッシュ Barry Barish アメリカ合衆国 \n", "19 2017年 NaN キップ・ソーン Kip Thorne アメリカ合衆国 \n", "20 2018年 NaN アーサー・アシュキン Arthur Ashkin アメリカ合衆国 \n", "21 2018年 NaN ジェラール・ムル Gérard Mourou フランス \n", "22 2018年 NaN ドナ・ストリックランド Donna Strickland カナダ \n", "23 2019年 NaN ジェームズ・ピーブルス Jim Peebles アメリカ合衆国 ( カナダ出身) \n", "24 2019年 NaN ミシェル・マイヨール Michel Mayor スイス \n", "25 2019年 NaN ディディエ・ケロー Didier Queloz スイス \n", "\n", " 受賞理由[4]・原著ないし関連論文 \n", "0 二次元物質グラフェンに関する革新的実験[注 71] \n", "1 二次元物質グラフェンに関する革新的実験[注 71] \n", "2 遠方の超新星の観測を通した宇宙の加速膨張の発見 Astrophys. J.: 517 (19... \n", "3 遠方の超新星の観測を通した宇宙の加速膨張の発見 Astrophys. J.: 517 (19... \n", "4 遠方の超新星の観測を通した宇宙の加速膨張の発見 Astrophys. J.: 517 (19... \n", "5 個別の量子系に対する計測および制御[注 72]を可能にする画期的な実験的手法に関する業績[5... \n", "6 個別の量子系に対する計測および制御[注 72]を可能にする画期的な実験的手法に関する業績[5... \n", "7 欧州原子核研究機構 (CERN) によって存在が確認された素粒子(ヒッグス粒子)に基づく、質... \n", "8 欧州原子核研究機構 (CERN) によって存在が確認された素粒子(ヒッグス粒子)に基づく、質... \n", "9 高輝度で省電力の白色光源を実現可能にした青色発光ダイオードの発明[10] \n", "10 高輝度で省電力の白色光源を実現可能にした青色発光ダイオードの発明[10] \n", "11 高輝度で省電力の白色光源を実現可能にした青色発光ダイオードの発明[10] \n", "12 素粒子「ニュートリノ」が質量を持つことを示すニュートリノ振動の発見[11] Nucl. Ph... \n", "13 素粒子「ニュートリノ」が質量を持つことを示すニュートリノ振動の発見[11] Nucl. Ph... \n", "14 物質のトポロジカル相とトポロジカル相転移の理論的発見[12][13] \n", "15 物質のトポロジカル相とトポロジカル相転移の理論的発見[12][13] \n", "16 物質のトポロジカル相とトポロジカル相転移の理論的発見[12][13] \n", "17 LIGO検出器および重力波の観測への決定的な貢献 \n", "18 LIGO検出器および重力波の観測への決定的な貢献 \n", "19 LIGO検出器および重力波の観測への決定的な貢献 \n", "20 光ピンセットの開発と生体システムへの応用 \n", "21 超高出力・超短パルスレーザーの生成方法の開発 \n", "22 超高出力・超短パルスレーザーの生成方法の開発 \n", "23 物理宇宙論における理論的発見 \n", "24 太陽型恒星を周回する太陽系外惑星の発見 \n", "25 太陽型恒星を周回する太陽系外惑星の発見 " ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = tables[12]\n", "df" ] }, { "cell_type": "markdown", "metadata": { "id": "O6bVMFaNKeUT" }, "source": [ "## Pandasでcsv/Excelファイルを読み込む\n", "\n", "\n", "### csvファイルの読み込み\n", "\n", "pandasには、csvを読み込むための関数```read_csv```が用意されていて、ファイルパスを指定する他に、URLを指定して開く事ができる。\n", "\n", "[教育用標準データセット](https://www.nstac.go.jp/use/literacy/ssdse/)の一つであるSSDSE-B(県別推移)を読み込んでみよう。\n", "\n", "下を実行すると...実はエラーとなる。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "UnicodeDecodeError", "evalue": "'utf-8' codec can't decode byte 0x94 in position 748: invalid start byte", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mUnicodeDecodeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mhttps://www.nstac.go.jp/sys/files/SSDSE-B-2024.csv\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/usr/local/lib/python3.10/site-packages/pandas/io/parsers/readers.py:948\u001b[0m, in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)\u001b[0m\n\u001b[1;32m 935\u001b[0m kwds_defaults \u001b[38;5;241m=\u001b[39m _refine_defaults_read(\n\u001b[1;32m 936\u001b[0m dialect,\n\u001b[1;32m 937\u001b[0m delimiter,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 944\u001b[0m dtype_backend\u001b[38;5;241m=\u001b[39mdtype_backend,\n\u001b[1;32m 945\u001b[0m )\n\u001b[1;32m 946\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate(kwds_defaults)\n\u001b[0;32m--> 948\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/usr/local/lib/python3.10/site-packages/pandas/io/parsers/readers.py:611\u001b[0m, in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 608\u001b[0m _validate_names(kwds\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnames\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m))\n\u001b[1;32m 610\u001b[0m \u001b[38;5;66;03m# Create the parser.\u001b[39;00m\n\u001b[0;32m--> 611\u001b[0m parser \u001b[38;5;241m=\u001b[39m \u001b[43mTextFileReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 613\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunksize \u001b[38;5;129;01mor\u001b[39;00m iterator:\n\u001b[1;32m 614\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m parser\n", "File \u001b[0;32m/usr/local/lib/python3.10/site-packages/pandas/io/parsers/readers.py:1448\u001b[0m, in \u001b[0;36mTextFileReader.__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 1445\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptions[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m kwds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 1447\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles: IOHandles \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m-> 1448\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_engine\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/usr/local/lib/python3.10/site-packages/pandas/io/parsers/readers.py:1723\u001b[0m, in \u001b[0;36mTextFileReader._make_engine\u001b[0;34m(self, f, engine)\u001b[0m\n\u001b[1;32m 1720\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg)\n\u001b[1;32m 1722\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1723\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmapping\u001b[49m\u001b[43m[\u001b[49m\u001b[43mengine\u001b[49m\u001b[43m]\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1724\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m:\n\u001b[1;32m 1725\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", "File \u001b[0;32m/usr/local/lib/python3.10/site-packages/pandas/io/parsers/c_parser_wrapper.py:93\u001b[0m, in \u001b[0;36mCParserWrapper.__init__\u001b[0;34m(self, src, **kwds)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdtype_backend\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpyarrow\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 91\u001b[0m \u001b[38;5;66;03m# Fail here loudly instead of in cython after reading\u001b[39;00m\n\u001b[1;32m 92\u001b[0m import_optional_dependency(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpyarrow\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 93\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reader \u001b[38;5;241m=\u001b[39m \u001b[43mparsers\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTextReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43msrc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 95\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39munnamed_cols \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reader\u001b[38;5;241m.\u001b[39munnamed_cols\n\u001b[1;32m 97\u001b[0m \u001b[38;5;66;03m# error: Cannot determine type of 'names'\u001b[39;00m\n", "File \u001b[0;32mparsers.pyx:579\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader.__cinit__\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mparsers.pyx:668\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._get_header\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mparsers.pyx:879\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._tokenize_rows\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mparsers.pyx:890\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._check_tokenize_status\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mparsers.pyx:2050\u001b[0m, in \u001b[0;36mpandas._libs.parsers.raise_parser_error\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mUnicodeDecodeError\u001b[0m: 'utf-8' codec can't decode byte 0x94 in position 748: invalid start byte" ] } ], "source": [ "pd.read_csv(\"https://www.nstac.go.jp/sys/files/SSDSE-B-2024.csv\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "その原因は、ファイルの文字コードがShift-JISであるため。\n", "デフォルトの`utf-8`以外で作成されたファイルを読み込む場合、エンコーディングを指定する必要がある。\n", "\n", "\"shift_jis\"等としたいところだが、最近のShift-JISに対応するエンコーディングの指示は\"cp932\"である。" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SSDSE-B-2024CodePrefectureA1101A110101A110102A1102A110201A110202A1301...L322101L322102L322103L322104L322105L322106L322107L322108L322109L322110
0年度地域コード都道府県総人口総人口(男)総人口(女)日本人人口日本人人口(男)日本人人口(女)15歳未満人口...食料費(二人以上の世帯)住居費(二人以上の世帯)光熱・水道費(二人以上の世帯)家具・家事用品費(二人以上の世帯)被服及び履物費(二人以上の世帯)保健医療費(二人以上の世帯)交通・通信費(二人以上の世帯)教育費(二人以上の世帯)教養娯楽費(二人以上の世帯)その他の消費支出(二人以上の世帯)
12021R01000北海道518300024460002737000514700024290002717000544000...71448220132667699128816137883048399132376251583
22020R01000北海道522461424650882759526515136624296972721669555804...776802730527309122559227142514140793942653956316
32019R01000北海道525900024800002780000522300024640002759000565000...729122086226332989510466164664227788482933557289
42018R01000北海道529300024950002798000526200024820002780000577000...6904419089270128845115171143739308108252699156984
..................................................................
596NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
597NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
598NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
599NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
600NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

601 rows × 112 columns

\n", "
" ], "text/plain": [ " SSDSE-B-2024 Code Prefecture A1101 A110101 A110102 A1102 \\\n", "0 年度 地域コード 都道府県 総人口 総人口(男) 総人口(女) 日本人人口 \n", "1 2021 R01000 北海道 5183000 2446000 2737000 5147000 \n", "2 2020 R01000 北海道 5224614 2465088 2759526 5151366 \n", "3 2019 R01000 北海道 5259000 2480000 2780000 5223000 \n", "4 2018 R01000 北海道 5293000 2495000 2798000 5262000 \n", ".. ... ... ... ... ... ... ... \n", "596 NaN NaN NaN NaN NaN NaN NaN \n", "597 NaN NaN NaN NaN NaN NaN NaN \n", "598 NaN NaN NaN NaN NaN NaN NaN \n", "599 NaN NaN NaN NaN NaN NaN NaN \n", "600 NaN NaN NaN NaN NaN NaN NaN \n", "\n", " A110201 A110202 A1301 ... L322101 L322102 \\\n", "0 日本人人口(男) 日本人人口(女) 15歳未満人口 ... 食料費(二人以上の世帯) 住居費(二人以上の世帯) \n", "1 2429000 2717000 544000 ... 71448 22013 \n", "2 2429697 2721669 555804 ... 77680 27305 \n", "3 2464000 2759000 565000 ... 72912 20862 \n", "4 2482000 2780000 577000 ... 69044 19089 \n", ".. ... ... ... ... ... ... \n", "596 NaN NaN NaN ... NaN NaN \n", "597 NaN NaN NaN ... NaN NaN \n", "598 NaN NaN NaN ... NaN NaN \n", "599 NaN NaN NaN ... NaN NaN \n", "600 NaN NaN NaN ... NaN NaN \n", "\n", " L322103 L322104 L322105 L322106 \\\n", "0 光熱・水道費(二人以上の世帯) 家具・家事用品費(二人以上の世帯) 被服及び履物費(二人以上の世帯) 保健医療費(二人以上の世帯) \n", "1 26676 9912 8816 13788 \n", "2 27309 12255 9227 14251 \n", "3 26332 9895 10466 16466 \n", "4 27012 8845 11517 11437 \n", ".. ... ... ... ... \n", "596 NaN NaN NaN NaN \n", "597 NaN NaN NaN NaN \n", "598 NaN NaN NaN NaN \n", "599 NaN NaN NaN NaN \n", "600 NaN NaN NaN NaN \n", "\n", " L322107 L322108 L322109 L322110 \n", "0 交通・通信費(二人以上の世帯) 教育費(二人以上の世帯) 教養娯楽費(二人以上の世帯) その他の消費支出(二人以上の世帯) \n", "1 30483 9913 23762 51583 \n", "2 41407 9394 26539 56316 \n", "3 42277 8848 29335 57289 \n", "4 39308 10825 26991 56984 \n", ".. ... ... ... ... \n", "596 NaN NaN NaN NaN \n", "597 NaN NaN NaN NaN \n", "598 NaN NaN NaN NaN \n", "599 NaN NaN NaN NaN \n", "600 NaN NaN NaN NaN \n", "\n", "[601 rows x 112 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"https://www.nstac.go.jp/sys/files/SSDSE-B-2024.csv\", encoding=\"cp932\")\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "今の場合ファイルの(0から数えて)1行目にヘッダ(列名)にしたい情報があるので`header`オプションを指定する。" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
年度地域コード都道府県総人口総人口(男)総人口(女)日本人人口日本人人口(男)日本人人口(女)15歳未満人口...食料費(二人以上の世帯)住居費(二人以上の世帯)光熱・水道費(二人以上の世帯)家具・家事用品費(二人以上の世帯)被服及び履物費(二人以上の世帯)保健医療費(二人以上の世帯)交通・通信費(二人以上の世帯)教育費(二人以上の世帯)教養娯楽費(二人以上の世帯)その他の消費支出(二人以上の世帯)
02021.0R01000北海道5183000.02446000.02737000.05147000.02429000.02717000.0544000.0...71448.022013.026676.09912.08816.013788.030483.09913.023762.051583.0
12020.0R01000北海道5224614.02465088.02759526.05151366.02429697.02721669.0555804.0...77680.027305.027309.012255.09227.014251.041407.09394.026539.056316.0
22019.0R01000北海道5259000.02480000.02780000.05223000.02464000.02759000.0565000.0...72912.020862.026332.09895.010466.016466.042277.08848.029335.057289.0
32018.0R01000北海道5293000.02495000.02798000.05262000.02482000.02780000.0577000.0...69044.019089.027012.08845.011517.011437.039308.010825.026991.056984.0
42017.0R01000北海道5325000.02510000.02815000.05298000.02499000.02799000.0588000.0...69640.024217.025633.010550.011222.012242.039559.09837.026797.057003.0
..................................................................
595NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
596NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
597NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
598NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
599NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

600 rows × 112 columns

\n", "
" ], "text/plain": [ " 年度 地域コード 都道府県 総人口 総人口(男) 総人口(女) 日本人人口 \\\n", "0 2021.0 R01000 北海道 5183000.0 2446000.0 2737000.0 5147000.0 \n", "1 2020.0 R01000 北海道 5224614.0 2465088.0 2759526.0 5151366.0 \n", "2 2019.0 R01000 北海道 5259000.0 2480000.0 2780000.0 5223000.0 \n", "3 2018.0 R01000 北海道 5293000.0 2495000.0 2798000.0 5262000.0 \n", "4 2017.0 R01000 北海道 5325000.0 2510000.0 2815000.0 5298000.0 \n", ".. ... ... ... ... ... ... ... \n", "595 NaN NaN NaN NaN NaN NaN NaN \n", "596 NaN NaN NaN NaN NaN NaN NaN \n", "597 NaN NaN NaN NaN NaN NaN NaN \n", "598 NaN NaN NaN NaN NaN NaN NaN \n", "599 NaN NaN NaN NaN NaN NaN NaN \n", "\n", " 日本人人口(男) 日本人人口(女) 15歳未満人口 ... 食料費(二人以上の世帯) 住居費(二人以上の世帯) \\\n", "0 2429000.0 2717000.0 544000.0 ... 71448.0 22013.0 \n", "1 2429697.0 2721669.0 555804.0 ... 77680.0 27305.0 \n", "2 2464000.0 2759000.0 565000.0 ... 72912.0 20862.0 \n", "3 2482000.0 2780000.0 577000.0 ... 69044.0 19089.0 \n", "4 2499000.0 2799000.0 588000.0 ... 69640.0 24217.0 \n", ".. ... ... ... ... ... ... \n", "595 NaN NaN NaN ... NaN NaN \n", "596 NaN NaN NaN ... NaN NaN \n", "597 NaN NaN NaN ... NaN NaN \n", "598 NaN NaN NaN ... NaN NaN \n", "599 NaN NaN NaN ... NaN NaN \n", "\n", " 光熱・水道費(二人以上の世帯) 家具・家事用品費(二人以上の世帯) 被服及び履物費(二人以上の世帯) 保健医療費(二人以上の世帯) \\\n", "0 26676.0 9912.0 8816.0 13788.0 \n", "1 27309.0 12255.0 9227.0 14251.0 \n", "2 26332.0 9895.0 10466.0 16466.0 \n", "3 27012.0 8845.0 11517.0 11437.0 \n", "4 25633.0 10550.0 11222.0 12242.0 \n", ".. ... ... ... ... \n", "595 NaN NaN NaN NaN \n", "596 NaN NaN NaN NaN \n", "597 NaN NaN NaN NaN \n", "598 NaN NaN NaN NaN \n", "599 NaN NaN NaN NaN \n", "\n", " 交通・通信費(二人以上の世帯) 教育費(二人以上の世帯) 教養娯楽費(二人以上の世帯) その他の消費支出(二人以上の世帯) \n", "0 30483.0 9913.0 23762.0 51583.0 \n", "1 41407.0 9394.0 26539.0 56316.0 \n", "2 42277.0 8848.0 29335.0 57289.0 \n", "3 39308.0 10825.0 26991.0 56984.0 \n", "4 39559.0 9837.0 26797.0 57003.0 \n", ".. ... ... ... ... \n", "595 NaN NaN NaN NaN \n", "596 NaN NaN NaN NaN \n", "597 NaN NaN NaN NaN \n", "598 NaN NaN NaN NaN \n", "599 NaN NaN NaN NaN \n", "\n", "[600 rows x 112 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "url = \"https://www.nstac.go.jp/sys/files/SSDSE-B-2024.csv\"\n", "df = pd.read_csv(url, encoding=\"cp932\", header=1)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "都道府県の列から、都道府県の名前を取り出してみよう。ある行以降はNaNになっているので、それを除去する。" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
年度地域コード都道府県総人口総人口(男)総人口(女)日本人人口日本人人口(男)日本人人口(女)15歳未満人口...食料費(二人以上の世帯)住居費(二人以上の世帯)光熱・水道費(二人以上の世帯)家具・家事用品費(二人以上の世帯)被服及び履物費(二人以上の世帯)保健医療費(二人以上の世帯)交通・通信費(二人以上の世帯)教育費(二人以上の世帯)教養娯楽費(二人以上の世帯)その他の消費支出(二人以上の世帯)
02021.0R01000北海道5183000.02446000.02737000.05147000.02429000.02717000.0544000.0...71448.022013.026676.09912.08816.013788.030483.09913.023762.051583.0
12020.0R01000北海道5224614.02465088.02759526.05151366.02429697.02721669.0555804.0...77680.027305.027309.012255.09227.014251.041407.09394.026539.056316.0
22019.0R01000北海道5259000.02480000.02780000.05223000.02464000.02759000.0565000.0...72912.020862.026332.09895.010466.016466.042277.08848.029335.057289.0
32018.0R01000北海道5293000.02495000.02798000.05262000.02482000.02780000.0577000.0...69044.019089.027012.08845.011517.011437.039308.010825.026991.056984.0
42017.0R01000北海道5325000.02510000.02815000.05298000.02499000.02799000.0588000.0...69640.024217.025633.010550.011222.012242.039559.09837.026797.057003.0
..................................................................
5592014.0R47000沖縄県1426000.0700000.0725000.01416000.0695000.0721000.0249000.0...56734.020998.020722.07509.06622.09531.032302.09016.018570.043864.0
5602013.0R47000沖縄県1419000.0697000.0722000.01410000.0692000.0718000.0249000.0...57278.023557.020499.07335.07398.09281.033976.09714.020199.050418.0
5612012.0R47000沖縄県1411000.0693000.0719000.01403000.0688000.0715000.0248000.0...55499.023731.019756.07353.06856.09948.027855.07769.019324.049890.0
5622011.0R47000沖縄県1402000.0688000.0714000.01395000.0684000.0711000.0247000.0...53193.023454.020645.06136.06855.09775.026806.07489.018818.048762.0
5632010.0R47000沖縄県1392818.0683328.0709490.01377248.0675338.0701910.0246313.0...54297.024269.019706.07306.07538.09127.028479.010577.020140.057283.0
\n", "

564 rows × 112 columns

\n", "
" ], "text/plain": [ " 年度 地域コード 都道府県 総人口 総人口(男) 総人口(女) 日本人人口 \\\n", "0 2021.0 R01000 北海道 5183000.0 2446000.0 2737000.0 5147000.0 \n", "1 2020.0 R01000 北海道 5224614.0 2465088.0 2759526.0 5151366.0 \n", "2 2019.0 R01000 北海道 5259000.0 2480000.0 2780000.0 5223000.0 \n", "3 2018.0 R01000 北海道 5293000.0 2495000.0 2798000.0 5262000.0 \n", "4 2017.0 R01000 北海道 5325000.0 2510000.0 2815000.0 5298000.0 \n", ".. ... ... ... ... ... ... ... \n", "559 2014.0 R47000 沖縄県 1426000.0 700000.0 725000.0 1416000.0 \n", "560 2013.0 R47000 沖縄県 1419000.0 697000.0 722000.0 1410000.0 \n", "561 2012.0 R47000 沖縄県 1411000.0 693000.0 719000.0 1403000.0 \n", "562 2011.0 R47000 沖縄県 1402000.0 688000.0 714000.0 1395000.0 \n", "563 2010.0 R47000 沖縄県 1392818.0 683328.0 709490.0 1377248.0 \n", "\n", " 日本人人口(男) 日本人人口(女) 15歳未満人口 ... 食料費(二人以上の世帯) 住居費(二人以上の世帯) \\\n", "0 2429000.0 2717000.0 544000.0 ... 71448.0 22013.0 \n", "1 2429697.0 2721669.0 555804.0 ... 77680.0 27305.0 \n", "2 2464000.0 2759000.0 565000.0 ... 72912.0 20862.0 \n", "3 2482000.0 2780000.0 577000.0 ... 69044.0 19089.0 \n", "4 2499000.0 2799000.0 588000.0 ... 69640.0 24217.0 \n", ".. ... ... ... ... ... ... \n", "559 695000.0 721000.0 249000.0 ... 56734.0 20998.0 \n", "560 692000.0 718000.0 249000.0 ... 57278.0 23557.0 \n", "561 688000.0 715000.0 248000.0 ... 55499.0 23731.0 \n", "562 684000.0 711000.0 247000.0 ... 53193.0 23454.0 \n", "563 675338.0 701910.0 246313.0 ... 54297.0 24269.0 \n", "\n", " 光熱・水道費(二人以上の世帯) 家具・家事用品費(二人以上の世帯) 被服及び履物費(二人以上の世帯) 保健医療費(二人以上の世帯) \\\n", "0 26676.0 9912.0 8816.0 13788.0 \n", "1 27309.0 12255.0 9227.0 14251.0 \n", "2 26332.0 9895.0 10466.0 16466.0 \n", "3 27012.0 8845.0 11517.0 11437.0 \n", "4 25633.0 10550.0 11222.0 12242.0 \n", ".. ... ... ... ... \n", "559 20722.0 7509.0 6622.0 9531.0 \n", "560 20499.0 7335.0 7398.0 9281.0 \n", "561 19756.0 7353.0 6856.0 9948.0 \n", "562 20645.0 6136.0 6855.0 9775.0 \n", "563 19706.0 7306.0 7538.0 9127.0 \n", "\n", " 交通・通信費(二人以上の世帯) 教育費(二人以上の世帯) 教養娯楽費(二人以上の世帯) その他の消費支出(二人以上の世帯) \n", "0 30483.0 9913.0 23762.0 51583.0 \n", "1 41407.0 9394.0 26539.0 56316.0 \n", "2 42277.0 8848.0 29335.0 57289.0 \n", "3 39308.0 10825.0 26991.0 56984.0 \n", "4 39559.0 9837.0 26797.0 57003.0 \n", ".. ... ... ... ... \n", "559 32302.0 9016.0 18570.0 43864.0 \n", "560 33976.0 9714.0 20199.0 50418.0 \n", "561 27855.0 7769.0 19324.0 49890.0 \n", "562 26806.0 7489.0 18818.0 48762.0 \n", "563 28479.0 10577.0 20140.0 57283.0 \n", "\n", "[564 rows x 112 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(url, encoding=\"cp932\", header=1)\n", "df = df.dropna()\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "あるいは、特定の列の特定の行がNaNかどうかを調べて除外してみると" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
年度地域コード都道府県総人口総人口(男)総人口(女)日本人人口日本人人口(男)日本人人口(女)15歳未満人口...食料費(二人以上の世帯)住居費(二人以上の世帯)光熱・水道費(二人以上の世帯)家具・家事用品費(二人以上の世帯)被服及び履物費(二人以上の世帯)保健医療費(二人以上の世帯)交通・通信費(二人以上の世帯)教育費(二人以上の世帯)教養娯楽費(二人以上の世帯)その他の消費支出(二人以上の世帯)
02021.0R01000北海道5183000.02446000.02737000.05147000.02429000.02717000.0544000.0...71448.022013.026676.09912.08816.013788.030483.09913.023762.051583.0
12020.0R01000北海道5224614.02465088.02759526.05151366.02429697.02721669.0555804.0...77680.027305.027309.012255.09227.014251.041407.09394.026539.056316.0
22019.0R01000北海道5259000.02480000.02780000.05223000.02464000.02759000.0565000.0...72912.020862.026332.09895.010466.016466.042277.08848.029335.057289.0
32018.0R01000北海道5293000.02495000.02798000.05262000.02482000.02780000.0577000.0...69044.019089.027012.08845.011517.011437.039308.010825.026991.056984.0
42017.0R01000北海道5325000.02510000.02815000.05298000.02499000.02799000.0588000.0...69640.024217.025633.010550.011222.012242.039559.09837.026797.057003.0
..................................................................
5592014.0R47000沖縄県1426000.0700000.0725000.01416000.0695000.0721000.0249000.0...56734.020998.020722.07509.06622.09531.032302.09016.018570.043864.0
5602013.0R47000沖縄県1419000.0697000.0722000.01410000.0692000.0718000.0249000.0...57278.023557.020499.07335.07398.09281.033976.09714.020199.050418.0
5612012.0R47000沖縄県1411000.0693000.0719000.01403000.0688000.0715000.0248000.0...55499.023731.019756.07353.06856.09948.027855.07769.019324.049890.0
5622011.0R47000沖縄県1402000.0688000.0714000.01395000.0684000.0711000.0247000.0...53193.023454.020645.06136.06855.09775.026806.07489.018818.048762.0
5632010.0R47000沖縄県1392818.0683328.0709490.01377248.0675338.0701910.0246313.0...54297.024269.019706.07306.07538.09127.028479.010577.020140.057283.0
\n", "

564 rows × 112 columns

\n", "
" ], "text/plain": [ " 年度 地域コード 都道府県 総人口 総人口(男) 総人口(女) 日本人人口 \\\n", "0 2021.0 R01000 北海道 5183000.0 2446000.0 2737000.0 5147000.0 \n", "1 2020.0 R01000 北海道 5224614.0 2465088.0 2759526.0 5151366.0 \n", "2 2019.0 R01000 北海道 5259000.0 2480000.0 2780000.0 5223000.0 \n", "3 2018.0 R01000 北海道 5293000.0 2495000.0 2798000.0 5262000.0 \n", "4 2017.0 R01000 北海道 5325000.0 2510000.0 2815000.0 5298000.0 \n", ".. ... ... ... ... ... ... ... \n", "559 2014.0 R47000 沖縄県 1426000.0 700000.0 725000.0 1416000.0 \n", "560 2013.0 R47000 沖縄県 1419000.0 697000.0 722000.0 1410000.0 \n", "561 2012.0 R47000 沖縄県 1411000.0 693000.0 719000.0 1403000.0 \n", "562 2011.0 R47000 沖縄県 1402000.0 688000.0 714000.0 1395000.0 \n", "563 2010.0 R47000 沖縄県 1392818.0 683328.0 709490.0 1377248.0 \n", "\n", " 日本人人口(男) 日本人人口(女) 15歳未満人口 ... 食料費(二人以上の世帯) 住居費(二人以上の世帯) \\\n", "0 2429000.0 2717000.0 544000.0 ... 71448.0 22013.0 \n", "1 2429697.0 2721669.0 555804.0 ... 77680.0 27305.0 \n", "2 2464000.0 2759000.0 565000.0 ... 72912.0 20862.0 \n", "3 2482000.0 2780000.0 577000.0 ... 69044.0 19089.0 \n", "4 2499000.0 2799000.0 588000.0 ... 69640.0 24217.0 \n", ".. ... ... ... ... ... ... \n", "559 695000.0 721000.0 249000.0 ... 56734.0 20998.0 \n", "560 692000.0 718000.0 249000.0 ... 57278.0 23557.0 \n", "561 688000.0 715000.0 248000.0 ... 55499.0 23731.0 \n", "562 684000.0 711000.0 247000.0 ... 53193.0 23454.0 \n", "563 675338.0 701910.0 246313.0 ... 54297.0 24269.0 \n", "\n", " 光熱・水道費(二人以上の世帯) 家具・家事用品費(二人以上の世帯) 被服及び履物費(二人以上の世帯) 保健医療費(二人以上の世帯) \\\n", "0 26676.0 9912.0 8816.0 13788.0 \n", "1 27309.0 12255.0 9227.0 14251.0 \n", "2 26332.0 9895.0 10466.0 16466.0 \n", "3 27012.0 8845.0 11517.0 11437.0 \n", "4 25633.0 10550.0 11222.0 12242.0 \n", ".. ... ... ... ... \n", "559 20722.0 7509.0 6622.0 9531.0 \n", "560 20499.0 7335.0 7398.0 9281.0 \n", "561 19756.0 7353.0 6856.0 9948.0 \n", "562 20645.0 6136.0 6855.0 9775.0 \n", "563 19706.0 7306.0 7538.0 9127.0 \n", "\n", " 交通・通信費(二人以上の世帯) 教育費(二人以上の世帯) 教養娯楽費(二人以上の世帯) その他の消費支出(二人以上の世帯) \n", "0 30483.0 9913.0 23762.0 51583.0 \n", "1 41407.0 9394.0 26539.0 56316.0 \n", "2 42277.0 8848.0 29335.0 57289.0 \n", "3 39308.0 10825.0 26991.0 56984.0 \n", "4 39559.0 9837.0 26797.0 57003.0 \n", ".. ... ... ... ... \n", "559 32302.0 9016.0 18570.0 43864.0 \n", "560 33976.0 9714.0 20199.0 50418.0 \n", "561 27855.0 7769.0 19324.0 49890.0 \n", "562 26806.0 7489.0 18818.0 48762.0 \n", "563 28479.0 10577.0 20140.0 57283.0 \n", "\n", "[564 rows x 112 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "df = pd.read_csv(url, encoding=\"cp932\", header=1)\n", "df = df.dropna(subset=['都道府県'])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "県名を取得したければ例えば" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['北海道', '青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県', '新潟県', '富山県', '石川県', '福井県', '山梨県', '長野県', '岐阜県', '静岡県', '愛知県', '三重県', '滋賀県', '京都府', '大阪府', '兵庫県', '奈良県', '和歌山県', '鳥取県', '島根県', '岡山県', '広島県', '山口県', '徳島県', '香川県', '愛媛県', '高知県', '福岡県', '佐賀県', '長崎県', '熊本県', '大分県', '宮崎県', '鹿児島県', '沖縄県']\n" ] } ], "source": [ "prefectures = list(df[\"都道府県\"].unique())\n", "print(prefectures)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NaNの判定は少しトリッキーで、単純な二項演算子で判定しようとすると直感と異なる振る舞いになる。" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nan同士を==で評価(しているつもり) False\n" ] } ], "source": [ "print(\"nan同士を==で評価(しているつもり)\", float('nan') == float('nan'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "さきほどのデータの例で、都道府県列からNaNでないものを取っているつもり" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['北海道', '青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県', '茨城県', '栃木県',\n", " '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県', '新潟県', '富山県', '石川県', '福井県',\n", " '山梨県', '長野県', '岐阜県', '静岡県', '愛知県', '三重県', '滋賀県', '京都府', '大阪府',\n", " '兵庫県', '奈良県', '和歌山県', '鳥取県', '島根県', '岡山県', '広島県', '山口県', '徳島県',\n", " '香川県', '愛媛県', '高知県', '福岡県', '佐賀県', '長崎県', '熊本県', '大分県', '宮崎県',\n", " '鹿児島県', '沖縄県', nan], dtype=object)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "df = pd.read_csv(url, encoding=\"cp932\", header=1)\n", "df[df[\"都道府県\"] != float('nan') ][\"都道府県\"].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nanに対して定義された関数やメソッドを用いる必要がある。" ] }, { "cell_type": "markdown", "metadata": { "id": "KBgNqsmGKjvm" }, "source": [ "### Excelファイルの読み込み\n", "\n", "Pandasには`EXcelFile`や`read_excel`という関数が用意されていて、多数のシートを含むようなエクセルファイルを開くことも出来る。" ] }, { "cell_type": "markdown", "metadata": { "id": "34iZ93suY1nz" }, "source": [ "今まではGoogle Driveにいれたファイルを読み出していたが、 \n", "Webから直接xlsxファイルを読み込んでみよう。" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "id": "2yR7aEeImkAl" }, "outputs": [], "source": [ "url = \"https://www.mext.go.jp/content/20201225-mxt_kagsei-mext_01110_012.xlsx\"\n", "input_file = pd.ExcelFile(url)" ] }, { "cell_type": "markdown", "metadata": { "id": "YEsLWG0mY8z-" }, "source": [ "ブック内のシートの一覧は以下のように取得できる。" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "id": "VJv-enRZTxUt" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pandas: シート名 ['表全体', '1穀類', '2いも及びでん粉類', '3砂糖及び甘味類', '4豆類', '5種実類', '6野菜類', '7果実類', '8きのこ類', '9藻類', '10魚介類', '11肉類', '12鶏卵', '13乳類', '14油脂類', '15菓子類', '16し好飲料', '17調味料及び香辛料', '18調理済み流通食品類']\n" ] } ], "source": [ "sheet_names = input_file.sheet_names\n", "print(\"pandas: シート名\",sheet_names)" ] }, { "cell_type": "markdown", "metadata": { "id": "Tn6Lq7UhT1ZX" }, "source": [ "シートを指定するのは、インデックスかシート名の文字列で行う。\n", "\n", "\"1 穀類\"を使うことにして、 \n", "pandasにあるread_excel関数を使ってみよう。 \n", "read_excel関数の最初の引数にはパスの他に、urlも取れる。" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "id": "07xxSw7nVdK2" }, "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0Unnamed: 1Unnamed: 2Unnamed: 3Unnamed: 4Unnamed: 5Unnamed: 6Unnamed: 7Unnamed: 8Unnamed: 9...Unnamed: 52Unnamed: 53Unnamed: 54Unnamed: 55Unnamed: 56Unnamed: 57Unnamed: 58Unnamed: 59Unnamed: 60更新日:2021年12月28日
0NaN食 品 番 号索 引 番 号可  食  部   100  g  当  た  りNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN備  考
1NaNNaNNaN食 品 名廃 棄 率エネルギーNaN水 分たんぱく質NaN...NaNNaNNaNNaNNaNNaNNaNアルコール食塩相当量NaN
2NaNNaNNaNNaNNaNNaNNaNNaNアミノ酸組成による\\nたんぱく質たんぱく質...ナイアシン当量ビ\\nタ\\nミ\\nン\\nB6ビ\\nタ\\nミ\\nン\\nB12葉 酸パントテン酸ビ オ チ ンビタミンCNaNNaNNaN
3NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
4NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
..................................................................
2111.001139201ひえ 精白粒0153436112.98.49.4...2.30.17(0)141.503.60-0歩留り: 55~60 %
2121.001140202もろこし 玄穀0145434412.0(9.0)10.3...(8.0)0.31(0)541.4215.0(0)-0別名: こうりゃん、ソルガム、たかきび、マイロ
2131.001141203もろこし 精白粒0147334812.5(8.0)9.5...(5.0)0.24(0)290.66-(0)-0別名: こうりゃん、ソルガム、たかきび、マイロ\\n歩留り: 70~80 %
2141.001142204ライむぎ 全粒粉0134231712.510.812.7...4.20.22(0)650.879.50-0別名:黒麦(くろむぎ)
2151.001143205ライむぎ ライ麦粉0136832413.57.88.5...2.60.10(0)340.63-(0)-0別名:黒麦(くろむぎ)\\n歩留り: 65~75 %
\n", "

216 rows × 62 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 \\\n", "0 NaN 食 品 番 号 索 引 番 号 可  食  部   100  g  当  た  り NaN \n", "1 NaN NaN NaN 食 品 名 廃 棄 率 \n", "2 NaN NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN NaN \n", ".. ... ... ... ... ... \n", "211 1.0 01139 201 ひえ 精白粒 0 \n", "212 1.0 01140 202 もろこし 玄穀 0 \n", "213 1.0 01141 203 もろこし 精白粒 0 \n", "214 1.0 01142 204 ライむぎ 全粒粉 0 \n", "215 1.0 01143 205 ライむぎ ライ麦粉 0 \n", "\n", " Unnamed: 5 Unnamed: 6 Unnamed: 7 Unnamed: 8 Unnamed: 9 ... \\\n", "0 NaN NaN NaN NaN NaN ... \n", "1 エネルギー NaN 水 分 たんぱく質 NaN ... \n", "2 NaN NaN NaN アミノ酸組成による\\nたんぱく質 たんぱく質 ... \n", "3 NaN NaN NaN NaN NaN ... \n", "4 NaN NaN NaN NaN NaN ... \n", ".. ... ... ... ... ... ... \n", "211 1534 361 12.9 8.4 9.4 ... \n", "212 1454 344 12.0 (9.0) 10.3 ... \n", "213 1473 348 12.5 (8.0) 9.5 ... \n", "214 1342 317 12.5 10.8 12.7 ... \n", "215 1368 324 13.5 7.8 8.5 ... \n", "\n", " Unnamed: 52 Unnamed: 53 Unnamed: 54 Unnamed: 55 Unnamed: 56 \\\n", "0 NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN \n", "2 ナイアシン当量 ビ\\nタ\\nミ\\nン\\nB6 ビ\\nタ\\nミ\\nン\\nB12 葉 酸 パントテン酸 \n", "3 NaN NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN NaN \n", ".. ... ... ... ... ... \n", "211 2.3 0.17 (0) 14 1.50 \n", "212 (8.0) 0.31 (0) 54 1.42 \n", "213 (5.0) 0.24 (0) 29 0.66 \n", "214 4.2 0.22 (0) 65 0.87 \n", "215 2.6 0.10 (0) 34 0.63 \n", "\n", " Unnamed: 57 Unnamed: 58 Unnamed: 59 Unnamed: 60 \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN アルコール 食塩相当量 \n", "2 ビ オ チ ン ビタミンC NaN NaN \n", "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", ".. ... ... ... ... \n", "211 3.6 0 - 0 \n", "212 15.0 (0) - 0 \n", "213 - (0) - 0 \n", "214 9.5 0 - 0 \n", "215 - (0) - 0 \n", "\n", " 更新日:2021年12月28日 \n", "0 備  考 \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", ".. ... \n", "211 歩留り: 55~60 % \n", "212 別名: こうりゃん、ソルガム、たかきび、マイロ \n", "213 別名: こうりゃん、ソルガム、たかきび、マイロ\\n歩留り: 70~80 % \n", "214 別名:黒麦(くろむぎ) \n", "215 別名:黒麦(くろむぎ)\\n歩留り: 65~75 % \n", "\n", "[216 rows x 62 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_excel(url,sheet_name=\"1穀類\")\n", "df" ] }, { "cell_type": "markdown", "metadata": { "id": "xew_ouFxVnLl" }, "source": [ "同じものが得られている。\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Excelファイルの読み込みに関する補足\n", "\n", "`pandas`内部では`ExcelFile`というクラスがExcelファイルを扱うために用意されている。\n", "\n", "Excelファイルが単一のシートしかない場合や、上でやったように`ExcelFile`化してシート名を既に知っている場合は、`read_excel`関数で直接読み込むことができ、DataFrameとして取得できる。\n", "\n", "\n", "ファイルによっては、読み込む際にエラーが出ることがある。\n", "\n", "その場合、`openpyxl`というライブラリをインストールすることで解決することがある。\n", "以下のようにしてインストールし、`read_excel`のオプションとして`engine=\"openpyxl\"`を指定するとよい。\n", "\n", "```python\n", "!pip install openpyxl\n", "df = pd.read_excel('filepath.xlsx',engine=\"openpyxl\")\n", "```\n", "\n", "Pythonには伝統的にExcelファイルを扱うためのライブラリが複数存在しており、pandasの内部でも用いられている。\n", "中でも、ファイルを読み込む際に良く用いられてきたのが`xlrd`である。\n", "pandasのバージョン1.1まではExcelファイルを扱う際、内部的に`xlrd`を使用していたが、v1.2からは`.xlsx`形式は`openpyxl`、`.xls`は`xlrd`を使用するようになった。\n", "https://pandas.pydata.org/pandas-docs/stable/whatsnew/v1.2.0.html\n", "\n", "\n", "したがって、使用している環境で`openpyxl`や`xlrd`などがなければインストールしたり、ファイルを読み込む際に明示的にengineを指定してやる必要がある。" ] }, { "cell_type": "markdown", "metadata": { "id": "pPBxyiV2oVKV" }, "source": [ "### データの整形\n", "\n", "次に、今取得したデータフレームのままでは少々扱い辛いので\"整形\"を考える。 \n", "というのも前から4行ほど表示してみると..." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "id": "NKcdOLCMV3qM" }, "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0Unnamed: 1Unnamed: 2Unnamed: 3Unnamed: 4Unnamed: 5Unnamed: 6Unnamed: 7Unnamed: 8Unnamed: 9...Unnamed: 52Unnamed: 53Unnamed: 54Unnamed: 55Unnamed: 56Unnamed: 57Unnamed: 58Unnamed: 59Unnamed: 60更新日:2021年12月28日
0NaN食 品 番 号索 引 番 号可  食  部   100  g  当  た  りNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN備  考
1NaNNaNNaN食 品 名廃 棄 率エネルギーNaN水 分たんぱく質NaN...NaNNaNNaNNaNNaNNaNNaNアルコール食塩相当量NaN
2NaNNaNNaNNaNNaNNaNNaNNaNアミノ酸組成による\\nたんぱく質たんぱく質...ナイアシン当量ビ\\nタ\\nミ\\nン\\nB6ビ\\nタ\\nミ\\nン\\nB12葉 酸パントテン酸ビ オ チ ンビタミンCNaNNaNNaN
3NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

4 rows × 62 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 \\\n", "0 NaN 食 品 番 号 索 引 番 号 可  食  部   100  g  当  た  り NaN \n", "1 NaN NaN NaN 食 品 名 廃 棄 率 \n", "2 NaN NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN NaN \n", "\n", " Unnamed: 5 Unnamed: 6 Unnamed: 7 Unnamed: 8 Unnamed: 9 ... \\\n", "0 NaN NaN NaN NaN NaN ... \n", "1 エネルギー NaN 水 分 たんぱく質 NaN ... \n", "2 NaN NaN NaN アミノ酸組成による\\nたんぱく質 たんぱく質 ... \n", "3 NaN NaN NaN NaN NaN ... \n", "\n", " Unnamed: 52 Unnamed: 53 Unnamed: 54 Unnamed: 55 Unnamed: 56 \\\n", "0 NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN \n", "2 ナイアシン当量 ビ\\nタ\\nミ\\nン\\nB6 ビ\\nタ\\nミ\\nン\\nB12 葉 酸 パントテン酸 \n", "3 NaN NaN NaN NaN NaN \n", "\n", " Unnamed: 57 Unnamed: 58 Unnamed: 59 Unnamed: 60 更新日:2021年12月28日 \n", "0 NaN NaN NaN NaN 備  考 \n", "1 NaN NaN アルコール 食塩相当量 NaN \n", "2 ビ オ チ ン ビタミンC NaN NaN NaN \n", "3 NaN NaN NaN NaN NaN \n", "\n", "[4 rows x 62 columns]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[0:4] " ] }, { "cell_type": "markdown", "metadata": { "id": "CULET-99WJ3D" }, "source": [ "最初の4行ほどに栄養素等の情報が入っているのだが、 \n", "セルが結合されたりしているため、所々にNaNが入っていたりして見辛い。\n", "\n", "(碁盤目の構造を破壊してしまうため「セルの結合」は機械的な処理と \n", "やや相性が悪く、プログラミングを用いたデータ分析では嫌われる)\n", "\n", "各省庁の公開データのフォーマットの統一化は今後に期待することにして... \n", "まず以下の項目に該当する列だけを抽出する事を考える。\n", "\n" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "id": "Jhdp9z7cZm97" }, "outputs": [], "source": [ "targets = [\"食品名\", \"エネルギー\",\"たんぱく質\", \"脂質\", \"炭水化物\"]" ] }, { "cell_type": "markdown", "metadata": { "id": "zGrqpS-6jhaK" }, "source": [ "該当するデータがどの行・列に格納されているかをコードで指定するのは、 \n", "前述のファイル構造の事情からやや面倒くさい。 \n", "\n", "以下では、その場しのぎ的ではあるが、 \n", "興味のある量が何番目かを指定してまとめてみることにしよう。\n", "\n", "そのために、1-2行目の要素を表示してみよう。" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "id": "yZ-IVG2Ma30o" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['nan', 'nan', 'nan', '食品名', '廃棄率', 'エネルギー', 'nan', '水分', 'たんぱく質', 'nan', '脂質', 'nan', 'nan', '炭水化物', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', '有機酸', '灰分', '無機質', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', '無機質', 'nan', 'nan', 'nan', 'ビタミン', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'アルコール', '食塩相当量', 'nan']\n", "['nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'アミノ酸組成によるたんぱく質', 'たんぱく質', '脂肪酸のトリアシルグリセロール当量', 'コレステロール', '脂質', '利用可能炭水化物', 'nan', 'nan', 'nan', 'nan', '食物繊維総量', '糖アルコール', '炭水化物', 'nan', 'nan', 'ナトリウム', 'カリウム', 'カルシウム', 'マグネシウム', 'リン', '鉄', '亜鉛', '銅', 'マンガン', 'nan', 'ヨウ素', 'セレン', 'クロム', 'モリブデン', 'ビタミンA', 'nan', 'nan', 'nan', 'nan', 'nan', 'ビタミンD', 'ビタミンE', 'nan', 'nan', 'nan', 'ビタミンK', 'ビタミンB1', 'ビタミンB2', 'ナイアシン', 'ナイアシン当量', 'ビタミンB6', 'ビタミンB12', '葉酸', 'パントテン酸', 'ビオチン', 'ビタミンC', 'nan', 'nan', 'nan']\n" ] } ], "source": [ "#1-2行目(エクセルだと2行目)の要素から\n", " #半角空白, 全角空白(\\u3000)や改行コード\\nを取り除いたリストを作って表示してみる\n", "\n", "for idx in range(1,3):\n", " tmp = df.iloc[idx].values\n", " tlist = list(map( lambda s: str(s).replace(\"\\u3000\",\"\").replace(\"\\n\",\"\").replace(\" \",\"\"),tmp))\n", " print(tlist)" ] }, { "cell_type": "markdown", "metadata": { "id": "KEaiS1EAiWDY" }, "source": [ "セルの結合により、興味のあるデータがどの列に記述されているかは注意が必要。 \n", "\n", "実際、[エネルギー]という文字列は1行目の6列目(それぞれインデックスでいうと0,5)で取得できるが、 \n", "kJ単位になっていて、kcal単位でほしければ、7列目に格納された値が必要になる。 \n", "\n", "また、エクセルファイルを見るとわかるように、たんぱく質・脂質・炭水化物はさらに細分化されており、 \n", "O列R列など、細かい列の分割が挿入されている. ~~これは大変困る~~\n", "\n", "単純にたんぱく質・脂質・炭水化物と表記されている列のインデックスはそれぞれ9,12,20となる。 \n", "食品名が格納されている列(3)、エネルギー[kJ単位] (6)と合わせて確認してみよう。" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "id": "U-Hzne6VgWf3" }, "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", " \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", "
Unnamed: 3Unnamed: 6Unnamed: 9Unnamed: 12Unnamed: 20
0可  食  部   100  g  当  た  りNaNNaNNaNNaN
1食 品 名NaNNaNNaNNaN
2NaNNaNたんぱく質脂質炭水化物
3NaNNaNNaNNaNNaN
4NaNNaNNaNNaNNaN
..................
211ひえ 精白粒3619.43.373.2
212もろこし 玄穀34410.34.771.1
213もろこし 精白粒3489.52.674.1
214ライむぎ 全粒粉31712.72.770.7
215ライむぎ ライ麦粉3248.51.675.8
\n", "

216 rows × 5 columns

\n", "
" ], "text/plain": [ " Unnamed: 3 Unnamed: 6 Unnamed: 9 Unnamed: 12 Unnamed: 20\n", "0 可  食  部   100  g  当  た  り NaN NaN NaN NaN\n", "1 食 品 名 NaN NaN NaN NaN\n", "2 NaN NaN たんぱく質 脂質 炭水化物\n", "3 NaN NaN NaN NaN NaN\n", "4 NaN NaN NaN NaN NaN\n", ".. ... ... ... ... ...\n", "211 ひえ 精白粒 361 9.4 3.3 73.2\n", "212 もろこし 玄穀 344 10.3 4.7 71.1\n", "213 もろこし 精白粒 348 9.5 2.6 74.1\n", "214 ライむぎ 全粒粉 317 12.7 2.7 70.7\n", "215 ライむぎ ライ麦粉 324 8.5 1.6 75.8\n", "\n", "[216 rows x 5 columns]" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "targets = [3,6,9,12,20]\n", "df.iloc[:,targets]" ] }, { "cell_type": "markdown", "metadata": { "id": "LNk4oIypmpTe" }, "source": [ "もう少し整形したいので、新しいデータフレームの列を書き換える。\n", "\n", "食品名等が記載されているのは10行目以降なので、それを使いcolumnsを指定する。\n", "\n", "さらに、食品名に含まれる余分な文字コードも削除しておこう。" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "id": "ZWkaRBZynATr" }, "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", " \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", "
食品名エネルギー(kcal)たんぱく質(g)脂質(g)炭水化物(g)
10成分識別子ENERC_KCALPROT-FAT-CHOCDF-
11アマランサス 玄穀34312.76.064.9
12あわ 精白粒34611.24.469.7
13あわ あわもち2105.11.345.3
14えんばく オートミール35013.75.769.1
..................
211ひえ 精白粒3619.43.373.2
212もろこし 玄穀34410.34.771.1
213もろこし 精白粒3489.52.674.1
214ライむぎ 全粒粉31712.72.770.7
215ライむぎ ライ麦粉3248.51.675.8
\n", "

206 rows × 5 columns

\n", "
" ], "text/plain": [ " 食品名 エネルギー(kcal) たんぱく質(g) 脂質(g) 炭水化物(g)\n", "10 成分識別子 ENERC_KCAL PROT- FAT- CHOCDF-\n", "11 アマランサス 玄穀 343 12.7 6.0 64.9\n", "12 あわ 精白粒 346 11.2 4.4 69.7\n", "13 あわ あわもち 210 5.1 1.3 45.3\n", "14 えんばく オートミール 350 13.7 5.7 69.1\n", ".. ... ... ... ... ...\n", "211 ひえ 精白粒 361 9.4 3.3 73.2\n", "212 もろこし 玄穀 344 10.3 4.7 71.1\n", "213 もろこし 精白粒 348 9.5 2.6 74.1\n", "214 ライむぎ 全粒粉 317 12.7 2.7 70.7\n", "215 ライむぎ ライ麦粉 324 8.5 1.6 75.8\n", "\n", "[206 rows x 5 columns]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ndf = df.iloc[:,targets] \n", "ndf = ndf.iloc[10:,:]\n", "ndf.columns=[\"食品名\",\"エネルギー(kcal)\",\"たんぱく質(g)\",\"脂質(g)\",\"炭水化物(g)\"]\n", "ndf[\"食品名\"] = ndf[\"食品名\"].str.replace(\"\\u3000\",\" \") # 食品名の中にある余分な全角空白(\\u3000)を半角スペースに置き換える\n", "ndf" ] }, { "cell_type": "markdown", "metadata": { "id": "B5FN5MFcmECG" }, "source": [ "次に、食品名の一覧を取得した後、興味のあるもの(日常的に馴染みのあるもの)だけを \n", "ピックアップしてみよう。" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "id": "_SI2LaqPmOK3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['成分識別子', 'アマランサス 玄穀', 'あわ 精白粒', 'あわ あわもち', 'えんばく オートミール', 'おおむぎ 七分つき押麦', 'おおむぎ 押麦 乾', 'おおむぎ 押麦 めし', 'おおむぎ 米粒麦', 'おおむぎ 大麦めん 乾', 'おおむぎ 大麦めん ゆで', 'おおむぎ 麦こがし', 'キヌア 玄穀', 'きび 精白粒', 'こむぎ [玄穀] 国産 普通', 'こむぎ [玄穀] 輸入 軟質', 'こむぎ [玄穀] 輸入 硬質', 'こむぎ [小麦粉] 薄力粉 1等', 'こむぎ [小麦粉] 薄力粉 2等', 'こむぎ [小麦粉] 中力粉 1等', 'こむぎ [小麦粉] 中力粉 2等', 'こむぎ [小麦粉] 強力粉 1等', 'こむぎ [小麦粉] 強力粉 2等', 'こむぎ [小麦粉] 強力粉 全粒粉', 'こむぎ [小麦粉] プレミックス粉 お好み焼き用', 'こむぎ [小麦粉] プレミックス粉 ホットケーキ用', 'こむぎ [小麦粉] プレミックス粉 から揚げ用', 'こむぎ [小麦粉] プレミックス粉 天ぷら用', 'こむぎ [小麦粉] プレミックス粉 天ぷら用 バッター', 'こむぎ [小麦粉] プレミックス粉 天ぷら用 バッター 揚げ', 'こむぎ [パン類] 角形食パン 食パン', 'こむぎ [パン類] 角形食パン 焼き', 'こむぎ [パン類] 角形食パン 耳を除いたもの', 'こむぎ [パン類] 角形食パン 耳', 'こむぎ [パン類] 食パン リーンタイプ', 'こむぎ [パン類] 食パン リッチタイプ', 'こむぎ [パン類] 山形食パン 食パン', 'こむぎ [パン類] コッペパン', 'こむぎ [パン類] 乾パン', 'こむぎ [パン類] フランスパン', 'こむぎ [パン類] ライ麦パン', 'こむぎ [パン類] 全粒粉パン', 'こむぎ [パン類] ぶどうパン', 'こむぎ [パン類] ロールパン', 'こむぎ [パン類] クロワッサン レギュラータイプ', 'こむぎ [パン類] クロワッサン リッチタイプ', 'こむぎ [パン類] くるみパン', 'こむぎ [パン類] イングリッシュマフィン', 'こむぎ [パン類] ナン', 'こむぎ [パン類] ベーグル', 'こむぎ [うどん・そうめん類] うどん 生', 'こむぎ [うどん・そうめん類] うどん ゆで', 'こむぎ [うどん・そうめん類] うどん 半生うどん', 'こむぎ [うどん・そうめん類] 干しうどん 乾', 'こむぎ [うどん・そうめん類] 干しうどん ゆで', 'こむぎ [うどん・そうめん類] そうめん・ひやむぎ 乾', 'こむぎ [うどん・そうめん類] そうめん・ひやむぎ ゆで', 'こむぎ [うどん・そうめん類] 手延そうめん・手延ひやむぎ 乾', 'こむぎ [うどん・そうめん類] 手延そうめん・手延ひやむぎ ゆで', 'こむぎ [中華めん類] 中華めん 生', 'こむぎ [中華めん類] 中華めん ゆで', 'こむぎ [中華めん類] 半生中華めん ', 'こむぎ [中華めん類] 蒸し中華めん 蒸し中華めん', 'こむぎ [中華めん類] 蒸し中華めん ソテー', 'こむぎ [中華めん類] 干し中華めん 乾', 'こむぎ [中華めん類] 干し中華めん ゆで', 'こむぎ [中華めん類] 沖縄そば 生', 'こむぎ [中華めん類] 沖縄そば ゆで', 'こむぎ [中華めん類] 干し沖縄そば 乾', 'こむぎ [中華めん類] 干し沖縄そば ゆで', 'こむぎ [即席めん類] 即席中華めん 油揚げ味付け', 'こむぎ [即席めん類] 即席中華めん 油揚げ 乾 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 即席中華めん 油揚げ 調理後全体 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 即席中華めん 油揚げ ゆで (添付調味料等を含まないもの)', 'こむぎ [即席めん類] 即席中華めん 油揚げ 乾 (添付調味料等を含まないもの)', 'こむぎ [即席めん類] 即席中華めん 非油揚げ 乾 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 即席中華めん 非油揚げ 調理後全体 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 即席中華めん 非油揚げ ゆで (添付調味料等を含まないもの)', 'こむぎ [即席めん類] 即席中華めん 非油揚げ 乾 (添付調味料等を含まないもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ 塩味 乾 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ 塩味 調理後全体 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ 塩味 調理後のめん (スープを残したもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ しょうゆ味 乾 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ しょうゆ味 調理後全体 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ しょうゆ味 調理後のめん (スープを残したもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ 焼きそば 乾 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 油揚げ 焼きそば 調理後全体 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 非油揚げ 乾 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 非油揚げ 調理後全体 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 中華スタイル即席カップめん 非油揚げ 調理後のめん (スープを残したもの)', 'こむぎ [即席めん類] 和風スタイル即席カップめん 油揚げ 乾 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 和風スタイル即席カップめん 油揚げ 調理後全体 (添付調味料等を含むもの)', 'こむぎ [即席めん類] 和風スタイル即席カップめん 油揚げ 調理後のめん (スープを残したもの)', 'こむぎ [マカロニ・スパゲッティ類] マカロニ・スパゲッティ 乾', 'こむぎ [マカロニ・スパゲッティ類] マカロニ・スパゲッティ ゆで', 'こむぎ [マカロニ・スパゲッティ類] マカロニ・スパゲッティ ソテー', 'こむぎ [マカロニ・スパゲッティ類] 生パスタ 生', 'こむぎ [ふ類] 生ふ', 'こむぎ [ふ類] 焼きふ 釜焼きふ', 'こむぎ [ふ類] 焼きふ 板ふ', 'こむぎ [ふ類] 焼きふ 車ふ', 'こむぎ [ふ類] 油ふ', 'こむぎ [その他] 小麦はいが', 'こむぎ [その他] 小麦たんぱく 粉末状', 'こむぎ [その他] 小麦たんぱく 粒状', 'こむぎ [その他] 小麦たんぱく ペースト状', 'こむぎ [その他] かやきせんべい', 'こむぎ [その他] ぎょうざの皮 生', 'こむぎ [その他] しゅうまいの皮 生', 'こむぎ [その他] 春巻きの皮 生', 'こむぎ [その他] 春巻きの皮 揚げ', 'こむぎ [その他] ピザ生地', 'こむぎ [その他] ちくわぶ', 'こむぎ [その他] パン粉 生', 'こむぎ [その他] パン粉 半生', 'こむぎ [その他] パン粉 乾燥', 'こむぎ [その他] 冷めん 生', 'こめ [水稲穀粒] 玄米', 'こめ [水稲穀粒] 半つき米', 'こめ [水稲穀粒] 七分つき米', 'こめ [水稲穀粒] 精白米 うるち米', 'こめ [水稲穀粒] 精白米 もち米', 'こめ [水稲穀粒] 精白米 インディカ米', 'こめ [水稲穀粒] はいが精米', 'こめ [水稲穀粒] 発芽玄米', 'こめ [水稲穀粒] 赤米', 'こめ [水稲穀粒] 黒米', 'こめ [水稲めし] 玄米', 'こめ [水稲めし] 半つき米', 'こめ [水稲めし] 七分つき米', 'こめ [水稲めし] 精白米 インディカ米', 'こめ [水稲めし] 精白米 うるち米', 'こめ [水稲めし] 精白米 もち米', 'こめ [水稲めし] はいが精米', 'こめ [水稲めし] 発芽玄米', 'こめ [水稲めし] 赤米', 'こめ [水稲めし] 黒米', 'こめ [水稲軟めし] 精白米', 'こめ [水稲全かゆ] 玄米', 'こめ [水稲全かゆ] 半つき米', 'こめ [水稲全かゆ] 七分つき米', 'こめ [水稲全かゆ] 精白米', 'こめ [水稲五分かゆ] 玄米', 'こめ [水稲五分かゆ] 半つき米', 'こめ [水稲五分かゆ] 七分つき米', 'こめ [水稲五分かゆ] 精白米', 'こめ [水稲おもゆ] 玄米', 'こめ [水稲おもゆ] 半つき米', 'こめ [水稲おもゆ] 七分つき米', 'こめ [水稲おもゆ] 精白米', 'こめ [陸稲穀粒] 玄米', 'こめ [陸稲穀粒] 半つき米', 'こめ [陸稲穀粒] 七分つき米', 'こめ [陸稲穀粒] 精白米', 'こめ [陸稲めし] 玄米', 'こめ [陸稲めし] 半つき米', 'こめ [陸稲めし] 七分つき米', 'こめ [陸稲めし] 精白米', 'こめ [うるち米製品] アルファ化米 一般用', 'こめ [うるち米製品] アルファ化米 学校給食用強化品', 'こめ [うるち米製品] おにぎり', 'こめ [うるち米製品] 焼きおにぎり', 'こめ [うるち米製品] きりたんぽ', 'こめ [うるち米製品] 上新粉', 'こめ [うるち米製品] 玄米粉', 'こめ [うるち米製品] 米粉', 'こめ [うるち米製品] 米粉パン 食パン', 'こめ [うるち米製品] 米粉パン ロールパン', 'こめ [うるち米製品] 米粉パン 小麦グルテン不使用のもの', 'こめ [うるち米製品] 米粉めん', 'こめ [うるち米製品] ビーフン', 'こめ [うるち米製品] ライスペーパー', 'こめ [うるち米製品] 米こうじ', 'こめ [もち米製品] もち', 'こめ [もち米製品] 赤飯', 'こめ [もち米製品] あくまき', 'こめ [もち米製品] 白玉粉', 'こめ [もち米製品] 道明寺粉', 'こめ [その他] 米ぬか', 'そば そば粉 全層粉', 'そば そば粉 内層粉', 'そば そば粉 中層粉', 'そば そば粉 表層粉', 'そば そば米', 'そば そば 生', 'そば そば ゆで', 'そば そば 半生そば', 'そば 干しそば 乾', 'そば 干しそば ゆで', 'とうもろこし 玄穀 黄色種', 'とうもろこし 玄穀 白色種', 'とうもろこし コーンミール 黄色種', 'とうもろこし コーンミール 白色種', 'とうもろこし コーングリッツ 黄色種', 'とうもろこし コーングリッツ 白色種', 'とうもろこし コーンフラワー 黄色種', 'とうもろこし コーンフラワー 白色種', 'とうもろこし ジャイアントコーン フライ 味付け', 'とうもろこし ポップコーン', 'とうもろこし コーンフレーク', 'はとむぎ 精白粒', 'ひえ 精白粒', 'もろこし 玄穀', 'もろこし 精白粒', 'ライむぎ 全粒粉', 'ライむぎ ライ麦粉']\n" ] } ], "source": [ "print(list(ndf[\"食品名\"]))" ] }, { "cell_type": "markdown", "metadata": { "id": "bT1akYL_pBXs" }, "source": [ "この中から...\n", "* こむぎ[パン類]食パンリッチタイプ\n", "* こむぎ[パン類]フランスパン\n", "* こめ[水稲軟めし]精白米\n", "* そばそばゆで\n", "* こむぎ[うどん・そうめん類]うどんゆで\n", "\n", "のみに興味があれば" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "id": "F2ouiW-jqpjm" }, "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", "
食品名エネルギー(kcal)たんぱく質(g)脂質(g)炭水化物(g)
45こむぎ [パン類] 食パン リッチタイプ256(7.8)(6.0)(45.6)
49こむぎ [パン類] フランスパン2899.41.357.5
61こむぎ [うどん・そうめん類] うどん ゆで952.60.421.6
147こめ [水稲軟めし] 精白米113(1.8)(0.3)(26.4)
195そば そば ゆで1304.81.026.0
\n", "
" ], "text/plain": [ " 食品名 エネルギー(kcal) たんぱく質(g) 脂質(g) 炭水化物(g)\n", "45 こむぎ [パン類] 食パン リッチタイプ 256 (7.8) (6.0) (45.6)\n", "49 こむぎ [パン類] フランスパン 289 9.4 1.3 57.5\n", "61 こむぎ [うどん・そうめん類] うどん ゆで 95 2.6 0.4 21.6\n", "147 こめ [水稲軟めし] 精白米 113 (1.8) (0.3) (26.4)\n", "195 そば そば ゆで 130 4.8 1.0 26.0" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tshokuhin = [\"こむぎ [パン類] 食パン リッチタイプ\",\"こむぎ [パン類] フランスパン\",\"こめ [水稲軟めし] 精白米\", \"そば そば ゆで\", \"こむぎ [うどん・そうめん類] うどん ゆで\"]\n", "ndf[ ndf[\"食品名\"].isin(tshokuhin)]" ] }, { "cell_type": "markdown", "metadata": { "id": "Jt2aLH3jrWSY" }, "source": [ "などとする。" ] }, { "cell_type": "markdown", "metadata": { "id": "So7B0ZauwuyT" }, "source": [ "'6野菜類'でも同様に..." ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "id": "aYwheZeiw0Oe" }, "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", " \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", "
食品名エネルギー(kcal)たんぱく質(g)脂質(g)炭水化物(g)
10成分識別子ENERC_KCALPROT-FAT-CHOCDF-
11アーティチョーク 花らい 生392.30.211.3
12アーティチョーク 花らい ゆで352.10.110.8
13あさつき 葉 生344.20.35.6
14あさつき 葉 ゆで414.20.37.3
..................
407(その他) ミックスベジタブル 冷凍673.00.715.1
408(その他) ミックスベジタブル 冷凍 ゆで653.10.814.6
409(その他) ミックスベジタブル 冷凍 油いため1083.34.915.7
410(その他) 野菜ミックスジュース 通常タイプ210.80.14.7
411(その他) 野菜ミックスジュース 濃縮タイプ361.00.37.8
\n", "

402 rows × 5 columns

\n", "
" ], "text/plain": [ " 食品名 エネルギー(kcal) たんぱく質(g) 脂質(g) 炭水化物(g)\n", "10 成分識別子 ENERC_KCAL PROT- FAT- CHOCDF-\n", "11 アーティチョーク 花らい 生 39 2.3 0.2 11.3\n", "12 アーティチョーク 花らい ゆで 35 2.1 0.1 10.8\n", "13 あさつき 葉 生 34 4.2 0.3 5.6\n", "14 あさつき 葉 ゆで 41 4.2 0.3 7.3\n", ".. ... ... ... ... ...\n", "407 (その他) ミックスベジタブル 冷凍 67 3.0 0.7 15.1\n", "408 (その他) ミックスベジタブル 冷凍 ゆで 65 3.1 0.8 14.6\n", "409 (その他) ミックスベジタブル 冷凍 油いため 108 3.3 4.9 15.7\n", "410 (その他) 野菜ミックスジュース 通常タイプ 21 0.8 0.1 4.7\n", "411 (その他) 野菜ミックスジュース 濃縮タイプ 36 1.0 0.3 7.8\n", "\n", "[402 rows x 5 columns]" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df6 = pd.read_excel(url,sheet_name=\"6野菜類\")\n", "df6.iloc[:,[3,6,9,12,20]]\n", "ndf6 = df6.iloc[:,[3,6,9,12,20]] \n", "ndf6 = ndf6.iloc[10:,:]\n", "ndf6.columns=[\"食品名\",\"エネルギー(kcal)\",\"たんぱく質(g)\",\"脂質(g)\",\"炭水化物(g)\"]\n", "ndf6[\"食品名\"] = ndf6[\"食品名\"].str.replace(\"\\u3000\",\" \") \n", "ndf6" ] }, { "cell_type": "markdown", "metadata": { "id": "di6-R2kIx88j" }, "source": [ "特定のキーワードを含むものを全て取得して、 \n", "食品名を細かく指定したり、対応する行番号のインデックスを取得できたりする" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "id": "XDN2orG9xP_j" }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
食品名エネルギー(kcal)たんぱく質(g)脂質(g)炭水化物(g)
81(キャベツ類) キャベツ 結球葉 生211.30.25.2
82(キャベツ類) キャベツ 結球葉 ゆで190.90.24.6
83(キャベツ類) キャベツ 結球葉 油いため781.66.05.9
84(キャベツ類) グリーンボール 結球葉 生201.40.14.3
85(キャベツ類) レッドキャベツ 結球葉 生302.00.16.7
358めキャベツ 結球葉 生525.70.19.9
359めキャベツ 結球葉 ゆで515.30.19.8
\n", "
" ], "text/plain": [ " 食品名 エネルギー(kcal) たんぱく質(g) 脂質(g) 炭水化物(g)\n", "81 (キャベツ類) キャベツ 結球葉 生 21 1.3 0.2 5.2\n", "82 (キャベツ類) キャベツ 結球葉 ゆで 19 0.9 0.2 4.6\n", "83 (キャベツ類) キャベツ 結球葉 油いため 78 1.6 6.0 5.9\n", "84 (キャベツ類) グリーンボール 結球葉 生 20 1.4 0.1 4.3\n", "85 (キャベツ類) レッドキャベツ 結球葉 生 30 2.0 0.1 6.7\n", "358 めキャベツ 結球葉 生 52 5.7 0.1 9.9\n", "359 めキャベツ 結球葉 ゆで 51 5.3 0.1 9.8" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kyabetu = ndf6[ndf6[\"食品名\"].str.contains('キャベツ')]\n", "kyabetu" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "id": "QboGKX8bx0yB" }, "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", " \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", "
食品名エネルギー(kcal)たんぱく質(g)脂質(g)炭水化物(g)
221(トマト類) 赤色トマト 果実 生200.70.14.7
222(トマト類) 赤色ミニトマト 果実 生301.10.17.2
223(トマト類) 黄色トマト 果実 生181.10.43.2
224(トマト類) ドライトマト29114.22.167.3
225(トマト類) 加工品 ホール 食塩無添加210.90.24.4
226(トマト類) 加工品 トマトジュース 食塩添加150.70.14.0
227(トマト類) 加工品 トマトジュース 食塩無添加180.70.14.0
228(トマト類) 加工品 ミックスジュース 食塩添加180.604.3
229(トマト類) 加工品 ミックスジュース 食塩無添加180.604.3
\n", "
" ], "text/plain": [ " 食品名 エネルギー(kcal) たんぱく質(g) 脂質(g) 炭水化物(g)\n", "221 (トマト類) 赤色トマト 果実 生 20 0.7 0.1 4.7\n", "222 (トマト類) 赤色ミニトマト 果実 生 30 1.1 0.1 7.2\n", "223 (トマト類) 黄色トマト 果実 生 18 1.1 0.4 3.2\n", "224 (トマト類) ドライトマト 291 14.2 2.1 67.3\n", "225 (トマト類) 加工品 ホール 食塩無添加 21 0.9 0.2 4.4\n", "226 (トマト類) 加工品 トマトジュース 食塩添加 15 0.7 0.1 4.0\n", "227 (トマト類) 加工品 トマトジュース 食塩無添加 18 0.7 0.1 4.0\n", "228 (トマト類) 加工品 ミックスジュース 食塩添加 18 0.6 0 4.3\n", "229 (トマト類) 加工品 ミックスジュース 食塩無添加 18 0.6 0 4.3" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tomato = ndf6[ndf6[\"食品名\"].str.contains('トマト')]\n", "tomato" ] }, { "cell_type": "markdown", "metadata": { "id": "ojENrlEZGepm" }, "source": [ "DataFrame同士を結合してまとめるなどして扱いやすいデータに整形していく.\n", "\n", "縦方向の結合はpandasのconcat(concatenateの略)を使う。" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "id": "SKoSAqvNGkrt" }, "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", " \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", " \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", "
食品名エネルギー(kcal)たんぱく質(g)脂質(g)炭水化物(g)
81(キャベツ類) キャベツ 結球葉 生211.30.25.2
82(キャベツ類) キャベツ 結球葉 ゆで190.90.24.6
83(キャベツ類) キャベツ 結球葉 油いため781.66.05.9
84(キャベツ類) グリーンボール 結球葉 生201.40.14.3
85(キャベツ類) レッドキャベツ 結球葉 生302.00.16.7
358めキャベツ 結球葉 生525.70.19.9
359めキャベツ 結球葉 ゆで515.30.19.8
221(トマト類) 赤色トマト 果実 生200.70.14.7
222(トマト類) 赤色ミニトマト 果実 生301.10.17.2
223(トマト類) 黄色トマト 果実 生181.10.43.2
224(トマト類) ドライトマト29114.22.167.3
225(トマト類) 加工品 ホール 食塩無添加210.90.24.4
226(トマト類) 加工品 トマトジュース 食塩添加150.70.14.0
227(トマト類) 加工品 トマトジュース 食塩無添加180.70.14.0
228(トマト類) 加工品 ミックスジュース 食塩添加180.604.3
229(トマト類) 加工品 ミックスジュース 食塩無添加180.604.3
\n", "
" ], "text/plain": [ " 食品名 エネルギー(kcal) たんぱく質(g) 脂質(g) 炭水化物(g)\n", "81 (キャベツ類) キャベツ 結球葉 生 21 1.3 0.2 5.2\n", "82 (キャベツ類) キャベツ 結球葉 ゆで 19 0.9 0.2 4.6\n", "83 (キャベツ類) キャベツ 結球葉 油いため 78 1.6 6.0 5.9\n", "84 (キャベツ類) グリーンボール 結球葉 生 20 1.4 0.1 4.3\n", "85 (キャベツ類) レッドキャベツ 結球葉 生 30 2.0 0.1 6.7\n", "358 めキャベツ 結球葉 生 52 5.7 0.1 9.9\n", "359 めキャベツ 結球葉 ゆで 51 5.3 0.1 9.8\n", "221 (トマト類) 赤色トマト 果実 生 20 0.7 0.1 4.7\n", "222 (トマト類) 赤色ミニトマト 果実 生 30 1.1 0.1 7.2\n", "223 (トマト類) 黄色トマト 果実 生 18 1.1 0.4 3.2\n", "224 (トマト類) ドライトマト 291 14.2 2.1 67.3\n", "225 (トマト類) 加工品 ホール 食塩無添加 21 0.9 0.2 4.4\n", "226 (トマト類) 加工品 トマトジュース 食塩添加 15 0.7 0.1 4.0\n", "227 (トマト類) 加工品 トマトジュース 食塩無添加 18 0.7 0.1 4.0\n", "228 (トマト類) 加工品 ミックスジュース 食塩添加 18 0.6 0 4.3\n", "229 (トマト類) 加工品 ミックスジュース 食塩無添加 18 0.6 0 4.3" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tdf = pd.concat([kyabetu, tomato])\n", "tdf" ] }, { "cell_type": "markdown", "metadata": { "id": "U6LFpNLN2sZh" }, "source": [ "## DataFrameのcsv/Excelファイルへの書き出し" ] }, { "cell_type": "markdown", "metadata": { "id": "tbZn9qyB2xTS" }, "source": [ "DataFrameオブジェクトは、```pandas```内の関数・メソッドを用いれば、簡単にcsvやExcelファイルとして書き出すことができる。\n", "\n", "実行履歴に残っている適当なDataFrameを、Google Driveにファイルとして書き出してみよう。" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "CKxWkUsW3Hi2" }, "outputs": [], "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ] }, { "cell_type": "markdown", "metadata": { "id": "gsr83KhA3Hww" }, "source": [ "**csvとして書き出す場合**\n", "\n", "適当にパスを指定して、DataFrameオブジェクトに```to_csv```関数を作用させる。 " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "jLS-3W8F27Xe" }, "outputs": [], "source": [ "df.to_csv(\"/content/drive/MyDrive/pd_write_test.csv\")" ] }, { "cell_type": "markdown", "metadata": { "id": "k6XnW1V93mik" }, "source": [ "**Excelファイルとして書き出す場合**\n", "\n", "この場合も同様で、```to_excel```関数を用いればよい。" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "A4A69Qb83vkk" }, "outputs": [], "source": [ "df.to_excel(\"/content/drive/MyDrive/pd_write_test.xlsx\")" ] }, { "cell_type": "markdown", "metadata": { "id": "jrfPQzrq4GJK" }, "source": [ "上記の関数内で書き出しに使う文字コードを指定することもできる。 \n", "例: ```encoding=\"utf-8_sig\"```, ```encoding=\"shift_jis\"```" ] } ], "metadata": { "colab": { "collapsed_sections": [], "include_colab_link": true, "name": "Python_misc_Pandas.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Python 3", "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.14" } }, "nbformat": 4, "nbformat_minor": 0 }