【Python】外部ファイルを読み込む方法(pd.read_excel・pd.read_csv)

プログラミング

オープンデータを利用して分析したいけど、PythonでExcelやCSVなどの外部データを読み込む方法はないかな。

こんな悩みにお答えします。

CSVやExcelなどをPythonで読み込むことができます。

今回は、Pythonで外部ファイルを読み込む方法をご紹介します。

この記事を読み終えると、Pythonを用いて外部ファイルを読み込み、自由にデータ整形を行うことができるようになります。

本記事の内容
・Pythonで外部データを読み込む方法
・自作データ(Excel)を読み込みfoliumで可視化

>>【Python】位置情報(緯度・経度)を可視化する方法(答えはfoliumライブラリ)
>>【Python】foliumのマーカーアイコンを自由に変更する方法

Pythonを学べるおすすめのプログラミングスクール
1. Aidemy
・・・AIエンジニアとしてのスキルを身に付けたい。その延長で就職、転職できたら嬉しい方におすすめ。
2.侍エンジニア塾
・・・基礎力と即戦力を身に付けられる、満足度No.1スクール
3.
TechAcademy
・・・副業に向けてスキルアップしたい。フリーランスなどを目指している方向け。
4
. AIジョブカレッジ
・・・コスパ良く、質の高い講座を受けたい方におすすめ。

本記事の信頼性

ひよこ
ひよこ

私は、大学時代にプログラミングを学び、PHPなどのWeb系言語からAIに用いられるPythonまで幅広く経験してきました。

現在はデータサイエンティストとして大企業で活動しています。

また今ではほぼ不労所得として月10万円以上の収益を継続的に達成しています。

 

1. 外部データを読み込む方法

近年、データ分析が一般的になりつつあり、コンペ(競技会)をはじめ各企業や団体からもデータを一般公開しているケースが多くみられるようになりました。今後はそのような公開されたデータを利用して、データ分析やアプリ作成を行うことも少なくないと思います。

そこで今回は、データ形式として多く採用されている、ExcelとCSVファイルをPythonで読み込む方法をご紹介します。

ファイルを読み込んだ後にデータを扱うことを考慮して、Pythonの数値計算ライブラリであるPandasのメソッドを利用して読み込みたいと思います。

  • pandas.read_excel
  • pandas.read_csv

>>pandas.read_excel()公式HP
>>pandas.read_csv()公式HP

    a. インストール方法

    今回はPandasライブラリを利用するため利用するために複雑な準備は不要です。以下の計3種のライブラリをインストールしましょう。

    • メインで扱う①Pandas
    • read_excelの内部で利用されているopenpyxl③xlrd
    $ pip install pandas
    $ pip install openpyxl
    $ pip install xlrd

     

    無事インストールが終わったら、Pythonをたたいてインストールできていることを確認してみましょう。

    import pandas
    import openpyxl
    import xlrd
    
    print(pandas.__version__)
    print(openpyxl.__version__)
    print(xlrd.__version__)
    
    
    #実行結果
    '1.1.5' #pandas
    '3.0.9' #openpyxl
    '2.0.1' #xlrd

    エラーが出なければ問題なし!これで、foliumを使う準備は万端です!

     

    2. pandas.read_excel()

    まずはExcelファイルの読み込みです。ここではExcelファイルを読み込む際の注意点や頻繁に利用される引数に着目し利用方法を確認していきます。

    a. サンプルデータの準備

    説明にあたりサンプルデータを準備しておきます。こちらを参考に2つのSheetを持つ”smple.xlsx”を用意しました。

    Sheet1

            A   B   C
    one     11  12  13
    two     21  22  23
    three   31  32  33

    Sheet2

            AA  BB  CC
    ONE     11  12  13
    TWO     21  22  23
    THREE   31  32  33

     

    b. 基本的な使い方

    import pandas as pd
    
    df = pd.read_excel("sample.xlsx",index_col=0)
    print(df)
    
    
    #実行結果
            A   B   C
    one     11  12  13
    two     21  22  23
    three   31  32  33

    引数として外部ファイルを指定することで簡単にpandas形式で読み込むことが可能です。また、index_col=0とすることで最初の列をインデックスとして利用することができます(後述:c. index_col, header)。

    そして、複数シートがある場合最初のシートが優先して読み込まれます(後述:e. 複数シートの読み込み)。

    エラーが出る場合
    pandasのバージョンによってはpd.read_excelでエラーがでる場合があります。その場合は引数に“engine=’openpyxl'”を追記しましょう。

     

    c. index_col, header

    引数を変更することで読み込み方を自由に変更することができます

    引数概要デフォルト
    index_colインデックス指定None
    headerヘッダー指定0
    df = pd.read_excel("sample.xlsx",index_col=None,header=0)
    print(df)
    
    #実行結果
            A   B   C
    0 one     11  12  13
    1 two     21  22  23
    2 three   31  32  33
    
    
    df = pd.read_excel("sample.xlsx",index_col=None,header=None)
    print(df)
    
    #実行結果
        0     1   2   3
    0 NaN     A   B   C
    1 one     11  12  13
    2 two     21  22  23
    3 three   31  32  33
    ひよこ
    ひよこ

    先頭行と先頭列はヘッダーとインデックスとして利用することが多いため理解しておくと便利です!

     

    d.usecols, skiprows, skipfooter

    また、読み込む段階で必要な列や行のみを抽出することも可能です(あまり利用する機会はないと思いますが)。

    引数概要デフォルト
    usecols読み込む列(列番号)を指定None
    skiprows読み込まない行(行番号)を指定None
    skipfooter読み込まない末尾の行(行数)を指定0
    df = pd.read_excel("sample.xlsx",usecols=[0,2,3],skiprows=[1],skipfooter=1)
    print(df)
    
    #実行結果
            B   C
    two     22  23

    全てのデータを読み込んだ上でpandas上で行や列の削除を行っても結果は同じ。ただデータサイズが大きくなると読み込みに時間がかかったり後の処理が重くなったりするため注意が必要です。

    今回のようにファイルを読み込む段階で必要な部分のみを抽出することができるという引き出しだけ持っておくと良いでしょう。

     

    e. 複数シートの読み込み

    シートが複数存在する場合、どのシートを読み込むのかそれとも全てのシートを読み込むのかを選択することができます。デフォルトでは0でありシート番号0、つまり最初のシートが読み込まれることになります。

    引数概要デフォルト
    sheetname読み込むシートを指定0
    import pandas as pd
    
    #シート番号で指定した場合
    df = pd.read_excel("sample.xlsx",index_col=0,sheetname=0)
    print(df)
    
    #実行結果
            A   B   C
    one     11  12  13
    two     21  22  23
    three   31  32  33
    
    
    #シート名で指定した場合
    df = pd.read_excel("sample.xlsx",index_col=0,sheetname="Sheet2")
    print(df)
    
    #実行結果
            AA  BB  CC
    ONE     11  12  13
    TWO     21  22  23
    THREE   31  32  33

     

    また、複数のシートを一度に読み込むことも可能で、辞書型として読み込まれます。

    import pandas as pd
    
    #複数のシートを一度に読み込む場合
    df = pd.read_excel("sample.xlsx",index_col=0,sheetname=[0,1])
    print(df[0])
    print(df[1])
    
    #実行結果
            A   B   C
    one     11  12  13
    two     21  22  23
    three   31  32  33
            AA  BB  CC
    ONE     11  12  13
    TWO     21  22  23
    THREE   31  32  33
    
    上記の例では、シート番号(0,1)でシートを指定しておりますが、シート名での指定も可能です。その場合pandas上で扱う際のキーはシート名となり、”df[“Sheet1”]“のように記述する必要があることに注意が必要です。

     

    最後に、シートを指定することなく全てのシートを読み込む場合にはsheetname=Noneとしましょう。この場合、キーはシート名になることに注意!

    import pandas as pd
    
    #複数のシートを一度に読み込む場合
    df = pd.read_excel("sample.xlsx",index_col=0,sheetname=None)
    print(df["Sheet1"])
    print(df["Sheet2"])
    
    #実行結果
            A   B   C
    one     11  12  13
    two     21  22  23
    three   31  32  33
            AA  BB  CC
    ONE     11  12  13
    TWO     21  22  23
    THREE   31  32  33

     

    3. pandas.read_csv()

    次にCSVファイルの読み込みです。read_csv()メソッドの利用方法は引数含めread_excel()とほぼ同様のため省略し、利用頻度が高いものを中心に表にまとめます。

    引数概要デフォルト
    index_colインデックス指定None
    headerヘッダー指定0
    usecols読み込む列(列番号)を指定None
    skiprows読み込まない行(行番号)を指定None
    skipfooter読み込まない末尾の行(行数)を指定0
    nows読み込む行数を指定None
    dtypeデータ型を指定(int, strなど)None
    encodingエンコーディングを指定(shift_jisなど)None
    エラーが出る場合
    skipfooterを指定した場合などにエラーがでるケースがあります。その場合は引数に“engine=’python‘”を追記しましょう。
    ひよこ
    ひよこ

    詳細は色々なサイトにまとまっているためそちらを参考にしてみてください。おすすめはこちら

     

    4. 例:foliumで可視化

    ここでは実際にread_xlsxを利用して外部ファイルの読み込みを実施し、Pythonライブラリであるfoliumで可視化まで行ってみます。

    a. 自作データの作成

    今回は位置情報を表すデータを用意しました。

    カラムデータ型概要
    namestr氏名
    latfloat緯度
    lonfloat経度

    作成したデータは以下のとおりです(sample_1.xlsx)。

    name      lat       lon
    fushiguro 35.662951 139.702690
    gojo      35.660126 139.697719
    ひよこ
    ひよこ

    少年ジャンプに掲載されている「呪術廻戦」より、2名の方にご協力いただこうと思います。

    b. データ読み込み

    それではデータを読み込んでいきましょう。今回のデータではカラムのインデックスは不要としています。

    import pandas as pd
    
    #ヘッダーは考慮するが、インデックスは作成しないように読み込み
    df = pd.read_excel("sample_1.xlsx", header=0, index_col=None,engine='openpyxl')
    print(df)
    
    #実行結果
      name      lat       lon
    0 fushiguro 35.662951 139.702690
    1 gojo      35.660126 139.697719

    c. データの可視化

    今回は位置情報に関するデータであったため、以下の内容を参考に地図上に可視化を行ってみます。

    【Python】位置情報(緯度・経度)を可視化する方法(答えはfoliumライブラリ)
    Pythonで位置情報を可視化したいけど、GISの知識はないし、簡単にできる方法を知りたい。何か良い方法はないかな。。 こんな悩みにお答えします。 実は、特別な知識やスキルが無くても簡単に位置情報...
    【Python】foliumのマーカーアイコンを自由に変更する方法
    foliumを使って位置情報の可視化を体験できた!地図上にマーカーをプロットできるけど、アイコンを自由に変更することはできないかな。。 こんな悩みにお答えします。 実は、foliumでは簡単にアイ...

     

    サンプルコードはこちらです。

    import folium
    from folium.features import CustomIcon
    
    #地図上にマーカーを配置する関数
    def character_view(map,img_name,icon_latlon,popup):
       icon = get_image(img_name)
       folium.Marker(location = icon_latlon,icon = icon,popup=popup).add_to(map)
    
    #アイコンを作成する関数
    def get_image(img_name):
       icon = CustomIcon(
          icon_image = img_name
          ,icon_size = (55, 65)
          ,icon_anchor = (30, 30)
          ,popup_anchor = (3, 3)
       )
       return icon
    #ベースとなる地図を作成
    map = folium.Map([35.658034, 139.701636], tiles="Stamen Terrain", zoom_start=16)
    
    #マーカーをプロット
    for i in range(len(df)):
       img_name = "./pic/" + str(df[i:i+1]["name"].values[0]) + ".png"
       icon_latlon = df[i:i+1][["lat","lon"]].values.reshape(-1).tolist()
       popup =forcus_data[i:i+1]["name"].values[0]
       character_view(map,img_name,icon_latlon,popup):
    
    #地図を保存
    map_file = "map_1.html"
    map.save(map_file)

     

    作成された結果はこちらです。確かに地図上に2名の方が配置されていることが確認できます。

     

    ひよこ
    ひよこ

    CSVでも同じ要領で実施することができます。あなたも是非試してみてください!

     

    5. まとめ

    今回は、Pythonで外部ファイルを読み込む方法をご紹介しました。

    ・Pythonで外部データを読み込む方法

    ・自作データ(Excel)を読み込みfoliumで可視化

    後続処理を考慮すると、外部ファイルの読み込みにPandasのメソッドであるpandas.read_excel()やpandas.read_csv()を用いることは最適解になり得ると思います。

    プログラミングが身近になりつつある現代において、外部ファイルを扱う機会は多く出てくるでしょう。大量のデータや大量のファイルを扱う際に手作業で実施するわけにもいきません。

    これからを生きるための一つのスキルとして身に付けておくと良いのではないでしょうか。

     

     

    本ブログでは、株式やプログラミングに関する記事を投稿しています。

    プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。

    独学で挫折してしまう方は、プログラミングスクールという方法がおすすめです。

    私の一押しは『TechAcademy』です。

    質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。

    無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。

    スキルアップを目指したい方におすすめのオンライン学習サービス

     

    Profile
    この記事を書いた人

    現役データサイエンティスト
    【投資×プログラミング】に関するブログを運営しています。

    ■発信内容
    ・・・プログラミング(Python)、銘柄分析、株価予測など
    ■投資対象
    ・・・インデックス投資、米国ETF、米国個別株

    普段は1万人規模の大企業で世にコンテンツを生み出してます。

    ひよこをフォローする
    プログラミング開発
    ひよこをフォローする
    副業プログラミング応援団

    コメント

    タイトルとURLをコピーしました