Pandas & NumPy Academy · レッスン

ExcelとJSONファイルの読み込み

pd.read_excelでExcelブックを、pd.read_jsonでJSONレコードを読み込み、一般的な形式の違いにも対応します。

レッスン 2/413 ステップ

「ExcelとJSONファイルの読み込み」はCoddyKit上の無料Pandas & NumPy Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPandas & NumPy Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Pandas & NumPy Academyコースには全4レッスンが含まれています。

ExcelとJSONが重要な理由

CSVは汎用的な形式ですが、Excelファイル(.xlsx/.xls)は、メールやレポート作成ツールで共有される業務データで広く使われています。JSONはREST APIやNoSQLデータベースの標準的な形式です。Pandasにはpd.read_excel()とpd.read_json()が用意されており、CSVの読み込み関数と同様のAPIを持つため、学んだスキルをそのまま応用できます。

import pandas as pd

# The three most common load functions share the same philosophy
df_csv   = pd.read_csv('data.csv')
df_excel = pd.read_excel('data.xlsx')
df_json  = pd.read_json('data.json')

Excelエンジンのインストール

Excelファイルを読み込むにはエンジンが必要です。新しい形式の.xlsxファイルにはopenpyxl、古い形式の.xlsファイルにはxlrdを使います。pip install openpyxlでインストールしてください。Pandasはファイル拡張子に基づいてエンジンを自動選択します。書き込みでは、高度な書式設定にxlsxwriterを使います。エンジンがインストールされていない場合、read_excel()はModuleNotFoundErrorを発生させます。

# Install the required engine:
# pip install openpyxl          # for .xlsx (modern)
# pip install xlrd==1.2.0       # for .xls (legacy)

import pandas as pd
df = pd.read_excel('report.xlsx', engine='openpyxl')

sheet_nameでシートを選択する

Excelブックには複数のシートを含めることができます。sheet_name=で読み込むシートを指定します。文字列(シート名)、整数(0から始まる位置)、または複数のシートを辞書に読み込むためのリストを渡せます。sheet_name=Noneを渡すと、すべてのシートをシート名をキーとする辞書に読み込みます。pd.ExcelFile('file.xlsx').sheet_namesで利用可能なシートを確認するのがよいでしょう。

import pandas as pd

# Read the second sheet
df = pd.read_excel('workbook.xlsx', sheet_name=1)

# Read by name
df = pd.read_excel('workbook.xlsx', sheet_name='Sales')

# Inspect available sheets
xl = pd.ExcelFile('workbook.xlsx')
print(xl.sheet_names)  # ['Summary', 'Sales', 'Costs']

Excelでよく使うパラメーター

pd.read_excel()は、read_csv()と同じパラメーターの多くに対応しています。たとえば、header=、index_col=、usecols=、skiprows=、dtype=、nrows=などです。Excelでは、usecolsに'A:C'や'A,C,E'のようなExcelの列範囲文字列も指定できます。スプレッドシートのレイアウトから列文字が分かっている場合に便利です。

import pandas as pd

df = pd.read_excel(
    'sales_report.xlsx',
    sheet_name='Q1',
    header=2,          # header is on row 3 (0-indexed)
    usecols='A:D',     # Excel column range
    skiprows=[3, 4],   # skip rows 4 and 5
    nrows=100
)

JSONの読み込み:orientの形式

pd.read_json()はJSONをDataFrameに読み込みます。orient=パラメーターでJSONの構造を指定します。'records'(行の辞書のリスト)、'columns'(列配列の辞書。デフォルト)、'index'(インデックスをキーとする行の辞書)、'values'(生の配列)があります。多くのREST APIは'records'形式を返します。正しいorientを判断するため、まず生のJSONを必ず確認してください。

import pandas as pd

# REST API response: list of records
json_str = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]'
df = pd.read_json(json_str, orient='records')
print(df)

ファイルまたはURLからJSONを読み込む

pd.read_json()には、ファイルパス、URL、またはJSON文字列を直接渡せます。深くネストされたJSON(ネストされたオブジェクトを含むAPIレスポンスなど)には、代わりにpandas.io.jsonモジュールのjson_normalize()を使います。これはネストされた辞書をフラット化し、ドット区切りの名前を持つ列に変換します。

import pandas as pd
from pandas.io.json import json_normalize

# From a file
df = pd.read_json('events.json')

# Flatten nested JSON
nested = [{'id': 1, 'user': {'name': 'A', 'age': 30}},
          {'id': 2, 'user': {'name': 'B', 'age': 25}}]
df_flat = json_normalize(nested)
print(df_flat.columns.tolist())  # ['id', 'user.name', 'user.age']

JSON Lines形式

JSON Lines(NDJSON)は、1行につき1つのJSONオブジェクトを格納するため、大規模なデータセットをストリーミングしやすい形式です。pd.read_json('file.jsonl', lines=True)を使ってこの形式を解析します。ログファイル、Kafkaのエクスポート、機械学習用データセットでよく使われます。各行は有効なJSONオブジェクトでなければならず、形式が壊れた行があると読み込みに失敗します。

import pandas as pd

# file.jsonl contains one JSON record per line:
# {"id": 1, "event": "click"}
# {"id": 2, "event": "view"}
df = pd.read_json('events.jsonl', lines=True)
print(df)

JSONでの日付解析の扱い

JSONにはネイティブの日付型がないため、日付は文字列またはUnixタイムスタンプ(エポックからのミリ秒または秒)として格納されます。convert_dates=True(デフォルト)を設定すると、Pandasは名前に'date'、'time'、または'at'を含む列を自動変換します。独自の列名やタイムスタンプを扱う場合は、pd.to_datetime(df['col'], unit='ms')で明示的に変換してください。

import pandas as pd

# Unix milliseconds timestamp column
df = pd.read_json('events.json', orient='records')
df['created_at'] = pd.to_datetime(df['created_at'], unit='ms')
print(df['created_at'].dtype)  # datetime64[ns]

ExcelとJSONで異なる落とし穴

Excelの落とし穴として、結合セルによってNaNの行が生成されること、非表示の行や列も出力に含まれること、そして数値の書式(たとえば日付が浮動小数点数として格納されている場合)を読み込み後に修正する必要があることが挙げられます。JSONの落とし穴としては、レコード間でフィールドの有無が一貫していないとNaNが生成されること、JSONオブジェクトの整数キーが文字列の列名になることが挙げられます。

import pandas as pd

# Excel date stored as float (Excel serial date)
df = pd.read_excel('old_report.xls')
# If dates appear as floats (e.g., 44927.0), convert:
# from xlrd import xldate_as_datetime
# df['date'] = df['date'].apply(lambda x: xldate_as_datetime(x, 0))

複数のシートに対応するpd.ExcelFile

同じファイルから複数のシートを効率よく読み込む必要がある場合は、pd.ExcelFileのコンテキストマネージャーを開き、各シートに対してparse(sheet_name)を呼び出します。これにより、シートごとにファイルを開き直して再解析する処理を避けられます。大きなブックでは特に重要です。コンテキストマネージャーを抜けると、ファイルハンドルは自動的に閉じられます。

import pandas as pd

with pd.ExcelFile('annual_report.xlsx') as xf:
    df_q1 = xf.parse('Q1')
    df_q2 = xf.parse('Q2')

print(df_q1.shape, df_q2.shape)

requestsでJSON APIを読み込む

REST APIのデータには、requestsライブラリでJSONを取得し、解析済みのPythonオブジェクトをpd.DataFrame()またはpd.json_normalize()に渡します。このパターンでは、HTTP処理とデータ解析処理を分離できます。また、Pandasがデータを処理する前に、ヘッダー、認証、ページネーションを扱えるようになります。

import pandas as pd
import requests

response = requests.get('https://api.example.com/records')
data = response.json()   # Python list of dicts
df = pd.DataFrame(data)
print(df.head())

理解度チェック

このレッスンで学んだ、PandasによるExcelファイルとJSONファイルの読み込みについて理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、pd.read_excel()でxlsxファイルを読み込み、sheet_nameで読み込むシートを指定できること、pd.read_json()でorientパラメーターにより制御される複数のJSON構造を扱えること、そしてjson_normalize()でネストされたJSONオブジェクトをフラットなDataFrameに変換できることを学びました。次は、共有や後続処理のためにDataFrameをCSVファイルとExcelファイルへエクスポートします。

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「ExcelとJSONファイルの読み込み」レッスンは無料ですか?

はい。「ExcelとJSONファイルの読み込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Pandas & NumPy Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Pandas & NumPy Academyコースには全4レッスンが含まれています。

「ExcelとJSONファイルの読み込み」で何を学びますか?

pd.read_excelでExcelブックを、pd.read_jsonでJSONレコードを読み込み、一般的な形式の違いにも対応します。 ブラウザで直接実行するハンズオンコードでPandas & NumPy Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Pandas & NumPy Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPandas & NumPy Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ExcelとJSONファイルの読み込み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPandas & NumPy Academyレッスンでコードを書いて実行できますか?

はい。すべてのPandas & NumPy Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. CSVファイルの読み込み
  2. ExcelとJSONファイルの読み込み
  3. DataFrameのファイルへの書き出し
  4. URLとStringIOからの読み込み
← Pandas & NumPy Academyに戻る