EDINETコードリストを読み込む【pandas】

EDINETコードリストは、パイソンのパンダス(pandas)で読むのが簡単です。

EDINETコードリストは複数企業のXBRL取得に使用します。

PythonのpandasでEDINETコードリストを読み込む

pandas.read_csv()で読み込みます。

エディネットコードリストの文字エンコーディングは「cp932」のようです。「shift-jis」だとエラーが出ました。

データは文字列(str)として読み込むのが簡単です。おまかせだと桁数の多い法人番号がfloat型になって、末尾に「.0」が生成されちゃいました。

最初の行は要らない行だったので、1行分だけスキップ。

スキップしてから最初の行(0行目)がラベル行。

import pandas as pd
def get_edinet_codes_df(file):
    """EDINETコードリストのデータフレーム取得"""
    # データフレーム生成
    df = pd.read_csv(
        file,
        encoding='cp932',
        dtype='str',
        skiprows=1, # 最初の行をスキップ
        header=0,
        )
    return df

 

ここから、上場企業の情報だけを抽出したりします。

抽出例です。データフレームはリストに変換することもできます。デバッグで良く使ってます。

    # 上場企業だけを抽出
    df = df[df['上場区分']=='上場']

    # 必要な列だけ抽出
    df = df.loc[:, [
        'EDINETコード', '上場区分',
        '提出者名', '提出者名(ヨミ)', '提出者名(英字)',
        '提出者業種', '証券コード', '提出者法人番号',
        ]]

    # データフレームをリストに変換
    datas = df.values.tolist()

 

作ったデータフレームの保存と読み込み

ピックル(pickle) 形式

ピックルで保存しておくと高速で読み込めます。データベースを保存するのにも適しています。基本的に内容を正しく保存し、正しく読み込むことができます。

pickle 保存:pandas.DataFrame.to_pickle()

pickle 読み込み:pandas.read_pickle()

    # データフレームをpickleで保存
    df.to_pickle(file)

    # pickleから読み込み
    df = pd.read_pickle(file)

 

エクセル(xlsx)形式

エクセルは中身を見たいときに便利です。デバッグで良く使っています。

インデックス列も保存したいときは「index=None」を削除します。

Excel 保存:pandas.DataFrame.to_excel()

Excel 読み込み:pandas.read_excel()

    # データフレームをExcelで保存
    df.to_excel(file, index=None)

    # Excelから読み込み
    df = pd.read_excel(file)

 

シー・エス・ブイ(csv)形式

CSVも中身を見たい時に便利です。差分が取り易いのが良いですね。汎用性があるので、データベースの保存にも使っています。エクセルでも開くには、utf-8-sig を指定します(後述)。

インデックス列も保存したいときは「index=None」を削除します。

CSV 保存:pandas.DataFrame.to_csv()

CSV 読み込み:pandas.read_csv()

    # データフレームをCSVで保存
    df.to_csv(symbols_csv, encoding='utf-8', index=None)

    # CSVから読み込み
    df = pd.read_csv(symbols_csv, encoding='utf-8')

 

また、BOM付きのUTF-8 (utf-8-sig) で保存すると、そのままエクセルで開けるCSVになります。ダブルクリックで開いても文字化けしないので便利です。特にデメリットもないので、自分の作っているシステムでは積極的に使っています。

    # データフレームをCSVで保存 (エクセルでも文字化けしない)
    df.to_csv(symbols_csv, encoding='utf-8-sig', index=None)

    # CSVから読み込み
    df = pd.read_csv(symbols_csv, encoding='utf-8-sig')
タイトルとURLをコピーしました