はじめに
- バージョン
- Python: 3.6.8
- pandas: 1.1.5
- xlrd: 1.2.0
- 概要
- pandasのread_excelを使うと、簡単にエクセルからのデータ取り込みが出来るので試してみます。
今回はエクセルファイル(sample.xlsx)の以下、2つのシートからデータを抽出します。
このデータをもとに、名前と年齢を表示させるコードを作ってみます。(ex: Taro is 20 years old)
1. サンプルコード
実際に作成したコードは以下です。案外シンプルなコードで書けます。
import pandas as pd
def main():
# データを取得するシート名一覧
sheet_list = ["Sheet1", "Sheet2"]
# エクセルからデータを抽出する
df = pd.read_excel("sample.xlsx", sheet_name=sheet_list) # point-1
for sheet_name in sheet_list:
print(sheet_name)
# シート名に該当するDataFrameを抽出
user_list = df[sheet_name].to_dict(orient="records") # point-2
for user in user_list:
print(" {} is {} years old".format(user["name"], user["age"]))
if __name__ == "__main__":
main()
- ポイント
-
- エクセルからデータを抽出する
-
以下のように、
sheet_name=
の部分で読み込むシート名一覧を指定することが可能です。pd.read_excel(読み込むExcelファイル, sheet_name=シート名一覧)
-
- DataFrameをdictに変換する
-
個人的にDataFrameよりdictの方がデータとして扱いやすいので、dictに変換します。
-
df[sheet_name]でシート名に該当するDataFrameを抽出し、to_dictで変換します。
その際、orient="records"
を入れることで、DataFrameの列名(name/age)がkeyになります。df[sheet_name].to_dict(orient="records")
-
2. 実行結果
想定通りの結果を得ることが出来ました。
Sheet1
Taro is 20 years old
Kei is 19 years old
Sheet2
Keiko is 22 years old
Hanako is 25 years old
まとめ
エクセルを含め、表の扱いはpandasに任せるとコードがシンプルになるということがわかると思います。
参考記事
pandas.read_excel — pandas 1.3.2 documentation
pandas.DataFrame.to_dict — pandas 1.3.2 documentation