Pandas df.to_json() 関数

Pandas よく使う関数


to_json()DataFrame のメソッドであり、データを JSON(JavaScript Object Notation)形式にエクスポートするために使用されます。

JSON は Web アプリケーションや API のデータ交換の標準形式であり、to_json()複数のJSON形式の出力をサポートしており、レコード形式、インデックス形式、カラム形式などがあります。pandas DataFrameをJSON文字列に変換したり、ファイルに書き込んだりして、他のシステムとのデータ交換を容易にします。


基本構文とパラメータ

構文形式

DataFrame.to_json(path_or_buf=None, orient=None, date_format=None,
                  double_precision=10, force_ascii=True, date_unit='ms',
                  default_handler=None, lines=False, index=False,
                  indent=None, ...)

パラメータの説明

パラメータ型説明デフォルト値
path_or_bufstr, path object, file-like objectファイルパス。Noneの場合は文字列を返します。None
orientstrJSON形式: 'split', 'records', 'index', 'columns', 'values', 'table'None
date_formatstr日付形式: 'epoch', 'iso'None
double_precisionint浮動小数点精度10
force_asciiboolASCIIエンコーディングを強制するかどうかTrue
date_unitstr日付単位: 's', 'ms', 'us', 'ns''ms'
linesboolJSON Lines形式。各行に1つのJSONオブジェクト。False
indexboolインデックスを含めるかどうかFalse

戻り値

  • 戻り値の型:None 或 str
  • ファイルパスを指定した場合、ファイルに書き込み、Noneを返します。
  • 当 path_or_buf=None指定しない場合は、JSON形式の文字列を返します。

実例

以下の例を通じて、to_json()のさまざまな使い方を完全にマスターできます。

例1: 基本用法 - JSON文字列としてエクスポート

まずDataFrameを作成し、次に使用しますto_json()JSON形式にエクスポートします。

実例

import pandas as pd

# サンプルDataFrameを作成
data = {
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
    'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)

# 例1a: 最も基本的なエクスポート(パスを指定しない場合、文字列を返す)
# デフォルトは orient='columns'
json_string = df.to_json()
print("デフォルトのJSON形式 (columns):")
print(json_string)
print()

# 例1b: ファイルにエクスポート
df.to_json('output_basic.json', orient='records', indent=2)
print("output_basic.json にエクスポートしました")

# 読み込みによる確認
df_check = pd.read_json('output_basic.json', orient='records')
print("n読み込み確認:")
print(df_check)

実行結果の予想:

默认 JSON 格式 (columns):
{"name":{"0":"Tom","1":"Jerry","2":"Mike","3":"Lucy"},"age":{"0":28,"1":35,"2":42,"3":26},...}

默认 JSON 格式 (records):
[
  {"name":"Tom","age":28,"city":"Beijing","salary":8000},
  {"name":"Jerry","age":35,"city":"Shanghai","salary":12000},
  {"name":"Mike","age":42,"city":"Guangzhou","salary":15000},
  {"name":"Lucy","age":26,"city":"Shenzhen","salary":7000}
]

コードの解説:

  • to_json()パスを指定しない場合はJSON文字列を返します。
  • デフォルトではorient='columns'、各列に1つのJSONオブジェクトになります。
  • indent=2出力を読みやすくします(フォーマット)。

例2: さまざまなJSON形式

JSONデータにはさまざまな形式があります。to_json()さまざまなニーズを満たすために複数の出力形式をサポートしています。

実例

import pandas as pd

# DataFrameを作成
df = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})

# 例2a: records形式 - 配列形式、各行に1つのオブジェクト
最も一般的で、ほとんどのAPIに適しています
json_records = df.to_json(orient='records')
print("Records形式(各行に1つのオブジェクト):")
print(json_records)
print()

# 例2b: index形式 - インデックスをキーとする
json_index = df.to_json(orient='index')
print("Index形式(インデックスをキーとする):")
print(json_index)
print()

# 例2c: columns形式 - 列名をキーとする(デフォルト)
json_columns = df.to_json(orient='columns')
print("Columns形式(列名をキーとする):")
print(json_columns)
print()

# 例2d: split形式 - 分割構造
json_split = df.to_json(orient='split')
print("Split形式(分割構造):")
print(json_split)
print()

# 例2e: values形式 - 値の配列のみを含む
json_values = df.to_json(orient='values')
print("Values形式(値のみを含む):")
print(json_values)

実行結果の予想:

Records 格式(每行一个对象):
[{"name":"Tom","age":28,"city":"Beijing"},
{"name":"Jerry","age":35,"city":"Shanghai"},
{"name":"Mike","age":42,"city":"Guangzhou"},
{"name":"Lucy","age":26,"city":"Shenzhen"}]

Index 格式(以索引为键):
{"0":{"name":"Tom","age":28,"city":"Beijing"},
"1":{"name":"Jerry","age":35,"city":"Shanghai"},
...}

Columns 格式(以列名为键):
{"name":{"0":"Tom","1":"Jerry"...},"age":{"0":28...}...}

Split 格式(分离结构):
{"index":[0,1,2,3],"columns":["name","age","city"],
"data":[["Tom",28,"Beijing"],["Jerry",35,"Shanghai"]...]}

Values 格式(只包含值):
[["Tom",28,"Beijing"],["Jerry",35,"Shanghai"],["Mike",42,"Guangzhou"],["Lucy",26,"Shenzhen"]]

コードの解説:

  • orient='records':配列形式で、各行がJSONオブジェクトであり、最も一般的です。
  • orient='index':DataFrameのインデックスを最上位のキーとします。
  • orient='columns':列名をキーとし、デフォルト形式です。
  • orient='split':分離された構造で、プログラムによる解析が容易です。
  • orient='values':列名やインデックスを持たない、数値のみの配列です。

例3: 日付と中国語のエンコーディングの処理

JSONエクスポート時には、日付と中国語のエンコーディングを正しく処理する必要があります。

実例

import pandas as pd
from datetime import datetime

# 例3a: 日付フィールドの処理
df_date = pd.DataFrame({
    'name': ['Tom', 'Jerry'],
    'birthday': [datetime(1995, 3, 15), datetime(1988, 7, 22)],
    'join_date': [datetime(2020, 1, 10), datetime(2019, 3, 5)]
})

# デフォルトの日付形式はタイムスタンプ(ミリ秒)
json_timestamp = df_date.to_json(date_format='epoch', orient='records')
print("日付形式 - タイムスタンプ:")
print(json_timestamp)
print()

# ISO形式の日付
json_iso = df_date.to_json(date_format='iso', orient='records')
print("日付形式 - ISO:")
print(json_iso)
print()

# 例3b: 中国語の処理
df_cn = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [28, 35, 42],
    '城市': ['北京', '上海', '广州']
})

# force_ascii=False は非ASCII文字を許可します
json_cn = df_cn.to_json(orient='records', force_ascii=False)
print("中国語コンテンツ(force_ascii=False):")
print(json_cn)

# ファイルに書き込む(デフォルトで中国語をサポート)
df_cn.to_json('output_cn.json', orient='records', force_ascii=False)
print("n output_cn.json にエクスポートしました")

# 読み込みによる確認
df_cn_check = pd.read_json('output_cn.json')
print("読み込み確認:")
print(df_cn_check)

実行結果の予想:

日期格式 - 时间戳:
[{"name":"Tom","birthday":796...
{"name":"Jerry","birthday":584...}

日期格式 - ISO:
[{"name":"tom","birthday":"1995-03-15T00:00:00.000Z",...}]

中文内容(force_ascii=False):
[{"姓名":"张三","年龄":28,"城市":"北京"},
{"姓名":"李四","年龄":35,"城市":"上海"},
{"姓名":"王五","年龄":42,"城市":"广州"}]

已导出到 output_cn.json

验证读取:
    姓名   年龄   城市
0  张三   (read_json 的    格式    orient='records' 匹配 to_json 的 orient='records')    北京
1 配对    李四   35    上海
2  王五   42    广州
</对>

コードの解説:

  • date_format='epoch'日付をタイムスタンプ(ミリ秒)に変換します。
  • date_format='iso'日付をISO 8601形式に変換します。
  • force_ascii=FalseJSON内で中国語の文字を保持することができ、Unicodeにエスケープしません。

例4: JSON Lines形式

JSON Linesは、各行に1つのJSONオブジェクトを持つ形式で、ログやビッグデータ処理でよく使われます。

実例

import pandas as pd

# DataFrameを作成
df = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})

# 例4a: JSON Lines形式(各行に1つのJSONオブジェクト)
# lines=True でJSON Lines形式を有効にする
json_lines = df.to_json(orient='records', lines=True)
print("JSON Lines形式:")
print(json_lines)
print()

# ファイルに書き込む
df.to_json('output_lines.json', orient='records', lines=True)
print("output_lines.json にエクスポートしました")

# 例4b: JSON Lines形式の読み込み
# 1行ずつ読み取る必要があります
import json
df_lines_list = []
with open('output_lines.json', 'r', encoding='utf-8') as f:
    for line in f:
        df_lines_list.append(json.loads(line.strip()))

df_from_lines = pd.DataFrame(df_lines_list)
print("nJSON Linesの読み込み:")
print(df_from_lines)

実行結果の予想:

JSON Lines 格式:
{"name":"Tom","age":28,"city":"Beijing"}
{"name":"Jerry","age":35,"city":"Shanghai"}
{"name":"Mike","age":42,"city":"city":"Guangzhou"}
{"name":"Lucy","age":26,"city":"Shenzhen"}

已导出到 output_lines.json

读取 JSON Lines:
    name  age       city
0    Tom   28    Beijing
对    读    Jerry   35    Shanghai
2   Mike   42   格式    Guangzhou
3   Lucy   26    Shenzhen

コードの解説:

  • lines=TrueJSON Lines形式を有効にし、各行に1つのJSONオブジェクトを出力します。
  • JSON Linesはストリーム処理やビッグデータのシナリオに適しています。
  • 読み取り時には、1行ずつ解析してDataFrameに変換する必要があります。

注意事項

  • デフォルトorient='columns'、一般的には ... の使用を推奨します。orient='records'より汎用的です。
  • 使用することでforce_ascii=False中国語の文字を保持できます。
  • JSON Lines形式は ... と組み合わせる必要があります。orient='records'使用します。
  • read_json()読み取り時には、同じ ... を使用する必要があります。orientパラメータ。
  • 日付形式には ... の使用をお勧めします。date_format='iso'、より読みやすくなります。

まとめ

to_json()DataFrameをJSON形式にエクスポートするための中心的なメソッドです。複数のJSON形式をサポートしており、Web APIやデータ交換などさまざまなシナリオのニーズを満たすことができます。

実際の業務では、JSONはWebアプリケーションで最も一般的に使われるデータ形式です。to_json()と組み合わせることでread_json()データのインポートとエクスポートを実現できます。読者は ... を重点的にマスターすることをお勧めします。orientパラメータのさまざまな形式と、... とのread_json()組み合わせ使用を。

Pandas よく使う関数

その他の拡張