Pandas df.to_json() 関数
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_buf | str, path object, file-like object | ファイルパス。Noneの場合は文字列を返します。 | None |
| orient | str | JSON形式: 'split', 'records', 'index', 'columns', 'values', 'table' | None |
| date_format | str | 日付形式: 'epoch', 'iso' | None |
| double_precision | int | 浮動小数点精度 | 10 |
| force_ascii | bool | ASCIIエンコーディングを強制するかどうか | True |
| date_unit | str | 日付単位: 's', 'ms', 'us', 'ns' | 'ms' |
| lines | bool | JSON Lines形式。各行に1つのJSONオブジェクト。 | False |
| index | bool | インデックスを含めるかどうか | False |
戻り値
- 戻り値の型:
None或str - ファイルパスを指定した場合、ファイルに書き込み、Noneを返します。
- 当
path_or_buf=None指定しない場合は、JSON形式の文字列を返します。
実例
以下の例を通じて、to_json()のさまざまな使い方を完全にマスターできます。
例1: 基本用法 - JSON文字列としてエクスポート
まずDataFrameを作成し、次に使用しますto_json()JSON形式にエクスポートします。
実例
# サンプル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()さまざまなニーズを満たすために複数の出力形式をサポートしています。
実例
# 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エクスポート時には、日付と中国語のエンコーディングを正しく処理する必要があります。
実例
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オブジェクトを持つ形式で、ログやビッグデータ処理でよく使われます。
実例
# 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()組み合わせ使用を。