Pandasとは
Pandasは、Series(リスト形式)とDataFrame(表形式)があります。
Pandasは、ファイルやデータベースからデータを読み込み、DataFrameに変換し、DataFrame上で新しい列を追加などのデータ加工や結合、SQLを利用して問い合わせをしたりすることができます。
今回は、ファイルやデータベースを読み込み、PandasのDataFrameに格納する方法を説明します。
ファイルやデータを読み込み、PandasのDataFrameに格納する
CSVファイルを読み込み、DataFrameに格納する
ローカル上からCSVファイルを読み込む。
1 2 3 4 5 |
import pandas as pd data = pd.read_csv("./yubin_data/ken_all_rome/KEN_ALL_ROME.csv") print(data) |
サイトからCSVファイルを読み込む
1 2 3 4 5 |
import pandas as pd data = pd.read_csv("https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv") print(data) |
読み込み時、区切り文字を指定する
区切り文字を指定する場合、sepを追加します。区切り文字のデフォルトは、カンマ(,)です。
スペース区切りは半角スペース、タブ区切りのは(\t)を設定します。
1 2 3 4 5 6 |
import pandas as pd data = pd.read_csv("./yubin_data/ken_all_rome/KEN_ALL_ROME.csv", sep=" ") # sepはスペース区切り data = pd.read_csv("./yubin_data/ken_all_rome/KEN_ALL_ROME.csv", sep="\t") # sepはタブ区切り print(data) |
読み込み時、文字コードを指定する
文字コードを指定する場合、encodingを追加します。
1 2 3 4 5 |
import pandas as pd data = pd.read_csv("./yubin_data/ken_all_rome/KEN_ALL_ROME.csv",encoding="cp932") print(data) |
日本語の文字コードは以下の通りです。
文字コード | encoding |
---|---|
シフトJIS | shift_jis |
EUC | euc_jp |
UTF-8 | utf-8 |
ISO-2022-JP | iso2022_jp |
CSVファイルにヘッダーがない場合
ヘッダーがない場合、「header=None」を追加します。
1 2 3 4 5 |
import pandas as pd data = pd.read_csv("./yubin_data/ken_all_rome/KEN_ALL_ROME.csv",encoding="cp932", header=None) print(data) |
読み込み時、列名を設定する
ヘッダーがない場合、そのままnamesでリスト型で列名を指定します。読み込み元の列名が英語などで分かりにくい時は、わかりやすい列名を指定します。
ヘッダーがある場合、さらに「header=0」を追加します。「header=0」の追加を忘れると、namesで指定した列名がデータとして含まれてしまいますので、注意しましょう。
1 2 3 4 5 6 7 8 9 |
import pandas as pd # ヘッダーがない場合 data = pd.read_csv("./yubin_data/ken_all_rome/KEN_ALL_ROME.csv",encoding="cp932", names=['郵便番号(7桁)', '都道府県名', '市区町村名']) # ヘッダーがある場合 data = pd.read_csv("./yubin_data/ken_all_rome/KEN_ALL_ROME.csv",encoding="cp932", header=0, names=['郵便番号(7桁)', '都道府県名', '市区町村名']) print(data) |
Excelファイルを読み込み、DataFrameに格納する
Excelファイルを読み込む
シートを指定せずにExcelファイルを読み込む場合、複数のシートが存在しても、最初のシートのみが読み込みます。
ここでは、「yubin.xlsx」ファイルを読み込んだ場合です。
1 2 3 4 5 |
import pandas as pd data = pd.read_excel('./yubin_data/yubin.xlsx') print(data) |
読み込み時、ヘッダーがない場合
ヘッダーがない場合、”header=None”を追加します。
1 2 3 4 5 |
import pandas as pd data = pd.read_excel('./yubin_data/yubin.xlsx', header=None) print(data) |
読み込み時、列名を設定する
Excelファイルを読み込み時、namesでリスト型で列名を指定します。読み込み元の列名が英語などで分かりにくい時に、わかりやすい列名を指定するといいでしょう。
ヘッダーがない場合、さらに「header=None」を追加します。
1 2 3 4 5 6 7 8 9 |
import pandas as pd # ヘッダーがある場合 data = pd.read_excel('./yubin_data/yubin.xlsx', names=['郵便番号(7桁)', '都道府県名', '市区町村名']) # ヘッダーがない場合 data = pd.read_excel('./yubin_data/yubin.xlsx', header=None, names=['郵便番号(7桁)', '都道府県名', '市区町村名']) print(data) |
読み込み時、読み込む列を指定する
usecolsを利用してヘッダーの列名をリスト型で指定してExcelファイルを読み込む場合、指定した列名が読み込まれます。ヘッダーがない場合は、数値を指定します。
1 2 3 4 5 6 7 8 9 |
import pandas as pd # ヘッダーがある場合 data = pd.read_excel('./yubin_data/yubin.xlsx', usecols=['郵便番号(7桁)', '都道府県名', '市区町村名']) # ヘッダーがない場合 data = pd.read_excel('./yubin_data/yubin.xlsx', usecols=[0, 1, 2]) print(data) |
読み込み時、読み込むシートを指定する
シートを指定してExcelファイルを読み込む場合、指定したシートが読み込まれます。
ここでは、シート名を「02AOMORI」に指定し、Excelファイルを読み込んだ場合です。
1 2 3 4 5 |
import pandas as pd data = pd.read_excel('./yubin_data/yubin.xlsx',sheet_name='02AOMORI') print(data) |
読み込み時、読み込むシートを複数指定する
シートを指定してExcelファイルを読み込む場合、指定したシートが読み込まれます。
ここでは、シート名を「01HOKKAI」と「02AOMORI」にを指定し、Excelファイルを読み込んだ場合です。
dataは、シート名をキーとしてデータが格納されます。
1 2 3 4 5 6 7 |
import pandas as pd data = pd.read_excel('./yubin_data/yubin.xlsx',sheet_name=['01HOKKAI','02AOMORI']) print(data) print(data['01HOKKAI']) print(data.keys()) |
読み込み時、すべてのシートを読み込む
すべてのシートを読み込む場合、「sheet_name=None」を追加します。
dataは、シート名をキーとしてデータが格納されます。
1 2 3 4 5 6 |
import pandas as pd data = pd.read_excel('./yubin_data/yubin.xlsx', sheet_name=None) print(data['02AOMORI']) print(data.keys()) |
Accessを読み込み、DataFrameに格納する
Accessからデータを読み込むには、pyodbcというPython用SQLのモジュールを利用します。
pyodbcを利用するには、pyodbcをpipコマンドでインストールします。
ここでは、Power Shellプロンプトを開いて「pip install pyodbc」コマンドでインストールしています。
Accessに接続するためには、DRIVERでAccessドライバー、DBQでAccessファイルを設定し、pyodbc.connectを利用して接続します。
接続後は、取得したいデータをSQL文で作成し、pd.read_sqlを利用してデータを取得します。
データ取得が成功したら、conn.closeでAccessを切断します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import pandas as pd import pyodbc # Accessに接続する con_str = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=./yubin_data/yubin.accdb;' conn = pyodbc.connect(con_str) # SQLを利用してAccessのKEN_ALL_ROMEテーブルのすべてのデータを対象にする strSQL= 'SELECT * FROM KEN_ALL_ROME' data = pd.read_sql(strSQL, conn) print(data) # Accessを切断 conn.close() |
SQLite3を読み込み、DataFrameに格納する
SQLite3データベースからデータを読み込むには、sqlite3というモジュールをインポートします。
SQLite3に接続するためには、SQLite3ファイルを設定し、sqlite3.connectを利用して接続します。
接続後は、取得したいデータをSQL文で作成し、pd.read_sql_queryを利用してデータを取得します。
データ取得が成功したら、conn.closeでSQLite3を切断します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import pandas as pd import sqlite3 # SQLite3に接続する con_str = './yubin_data/yubin.db3' conn = sqlite3.connect(con_str) # SQLite3のKEN_ALL_ROMEテーブルのすべてのデータを対象にする strSQL= 'SELECT * FROM KEN_ALL_ROME' data = pd.read_sql_query(strSQL,conn) print(data) # SQLite3を切断 conn.close() |
JSONファイルを読み込み、DataFrameに格納する
JSONファイルを読み込むには、Pandasのread_json関数を利用します。
ローカル上からJSONファイルを読み込む。
ここでは、「20200519.json」を読み込んだ場合です。
1 2 3 4 5 6 |
import pandas as pd # ローカル上からJSONを読み込む data = pd.read_json('20200519.json') print(data) |
サイトからCSVファイルを読み込む
ここでは、サイトから「https://opendata.corona.go.jp/api/covid19DailySurvey/20200519」のJSONデータをみ込んだ場合です。
1 2 3 4 5 6 |
import pandas as pd # サイトからJSONを読み込む data = pd.read_json('https://opendata.corona.go.jp/api/covid19DailySurvey/20200519') print(data) |