JSON と Pandas DataFrame を使った作業は、データ分析、レポーティング、ETL パイプラインにおいて一般的です。Pandas は基本的なパースのために readjson
を提供していますが、深くネストされた構造、非常に大きなファイル、または Excel 優先のワークフローには苦労することがあります。ここで Aspose.Cells for Python が役立ちます。これは、分析のためにクリーンな DataFrame を得るために Pandas と簡単に統合できる豊富な JSON から Excel へのパイプラインを提供します。このブログ記事では、JSON を Python の Pandas DataFrame に変換する方法を学びます。
JSONをPandas DataFrameに変換するためのPythonライブラリ
Aspose.Cells for Python via .NET は、Microsoft Excelを必要としない強力なスプレッドシートAPIです。従来のExcel自動化を超えて、直接JSONのインポートおよびエクスポートをサポートしており、JSONをPandas DataFrameに変換し、その後Excelで保存または処理したい場合に最適です。
Aspose.Cellsを使用すると、次のことができます。
JsonUtility
を使用して、配列やネストされた構造を処理するオプションとともに、JSONをワークシートにインポートします。- ワークシートの範囲を分析と視覚化のためにPandas DataFrameに変換します。
- Excelファイル内でJSONを作成、ロード、および処理し、分析パイプラインに適合させます。
- データフレームをExcel(XLSX、CSV、ODS、PDF)にエクスポートしてレポートを作成します。
要するに、このライブラリは、報告のためにJSONからExcelにデータを移動するのを簡単にし、より深い分析にはPandasを使用します。 JsonUtility
はJSONをワークシートにインポートし、JsonLayoutOptions
は配列やネストされたオブジェクトの展開方法を制御します。
JSONをデータフレームに変換する
Aspose.Cells は JSON を直接ワークシートにインポートします。次に、ヘッダー行とデータ行を読み取って Pandas DataFrame を構築します。
以下の手順に従って、JSONをpandasのDataFrameに変換します:
- ワークブックを作成し、最初のワークシートを取得します。
JsonLayoutOptions
を構成して、配列をテーブルとして扱うようにします。0
行、0
列の JSON 文字列をインポートします。- 最初の行を列のヘッダーとして使用します。
- 残りの行をデータとして抽出します。
- Pandas データフレームを作成します。
次のコード例は、PythonでJSONをpandas DataFrameに変換する方法を示しています:
import pandas as pd
import aspose.cells as ac
# 新しいワークブックを作成し、最初のワークシートを取得します(0 ベースのインデックス)。
wb = ac.Workbook()
ws = wb.worksheets.get(0)
# ワークシートにJSONがどのように配置されるべきかを設定します。
options = ac.utility.JsonLayoutOptions()
options.array_as_table = True # Treat a top-level JSON array as a table (rows/columns)
# 例のJSON配列の単純なオブジェクト
json_data = '[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]'
# ワークシートにJSONをインポートし、行=0、列=0(セルA1)から始めます。
ac.utility.JsonUtility.import_data(json_data, ws.cells, 0, 0, options)
# データを含む最初の行を見つけてください(これがヘッダー行になります)。
header_idx = ws.cells.min_data_row
# その行からヘッダー値を抽出して、DataFrameの列名として使用します。
columns = [cell.value for cell in ws.cells.rows[header_idx]]
# すべての後続の行をデータとして抽出する(ヘッダー行をスキップする)
data = [
[cell.value for cell in row]
for idx, row in enumerate(ws.cells.rows)
if row and idx != header_idx
]
# 収集したヘッダーと行を使用してデータフレームを構築します。
df = pd.DataFrame(data, columns=columns)
# Display the result
print(df)
Output
id name
0 1.0 Alice
1 2.0 Bob
入れ子のJSONをPandas DataFrameに変換する
あなたのJSONにネストされたオブジェクトが含まれている場合、Aspose.CellsはJsonUtilityを使用してJSONをワークシートにインポートし、その後データフレームにエクスポートできます。JsonLayoutOptionsは、配列とネストされたオブジェクトがどのように展開されるかを制御します。
以下の手順に従って、ネストされたJSONをpandasのDataFrameに変換してください:
- ワークブックを作成し、最初のワークシートを選択します。
- 必要な
JsonLayoutOptions
プロパティを設定します。例えば、arrayastable=True
、ignorearraytitle=True
、ignoreobjecttitle=True
、およびkeptschema=True
です。 0
行目、0
列目のネストされた JSON をインポートします。- 使用された範囲を検出し、全体にわたるヘッダー行を読み取ります。
- 同じ幅を持つすべての次の行を読み取ります。
- データフレームを構築します。オプションでdtypesをキャストします(例:
total
を数値に)。
次のコード例は、PythonでネストされたJSONをpandas DataFrameに変換する方法を示しています:
import pandas as pd
import aspose.cells as ac
# ワークブックを作成し、最初のワークシートを取得します。
wb = ac.Workbook()
ws = wb.worksheets.get(0)
# ネストされたJSONのレイアウトオプション
opt = ac.utility.JsonLayoutOptions()
opt.array_as_table = True # Treat 'orders' array as a table (rows)
opt.ignore_array_title = True # Do not place a title row for the 'orders' array
opt.ignore_object_title = True # Do not place extra title rows for nested objects (e.g., 'buyer')
opt.kept_schema = True # Keep a stable set of columns even if some records miss fields
# ステップ 3: あなたのネストされた JSON
nested = '''
{
"batch": "A1",
"orders": [
{"orderId": "1001", "total": "49.90", "buyer": {"city": "NYC", "zip": "10001"}},
{"orderId": "1002", "total": "79.00", "buyer": {"city": "Boston", "zip": "02108"}}
]
}
'''
# A1 (行=0, 列=0) の上記のオプションを使用してインポートします
ac.utility.JsonUtility.import_data(nested, ws.cells, 0, 0, opt)
# 使用範囲を検出
first_row = ws.cells.min_data_row
first_col = ws.cells.min_data_column
last_row = ws.cells.max_data_row
last_col = ws.cells.max_data_column
# 固定幅のすべての使用された列の範囲にわたってヘッダー行を読み取ります。
raw_columns = [ws.cells.get(first_row, c).value for c in range(first_col, last_col + 1)]
# ヘッダーを安全にする: None/空白を \"Column{n}\" に置き換え、strにキャストする
columns = [
(str(v) if v is not None and str(v).strip() != "" else f"Column{idx + 1}")
for idx, v in enumerate(raw_columns)
]
# データ行を同じ幅で読み取ります(固定幅により整列が保証されます)
data = []
for r in range(first_row + 1, last_row + 1):
row_vals = [ws.cells.get(r, c).value for c in range(first_col, last_col + 1)]
data.append(row_vals)
# データフレームを構築する
df = pd.DataFrame(data, columns=columns)
# オプション: 列名を整理する(例: スペースを置き換える)
df.columns = [str(c).strip() for c in df.columns]
# Optional typing:
# - ZIPコードは文字列として保持してください(先頭のゼロが重要です)
# - 合計を数値に変換する(非数値をNaNに強制)
for col in list(df.columns):
if col.lower().endswith("total"):
df[col] = pd.to_numeric(df[col], errors="coerce")
# Print
print(df)
Output
A1 1001 49.90 NYC 10001
0 None 1002 79.00 Boston 02108
注意:
convertnumericordate=True
を有効にすると、数値のような文字列(例:合計)が数値に変換される可能性がありますが、\"02108\"
のような郵便番号は先頭のゼロが失われる場合があります。郵便番号を文字列として保持する必要がある場合は、False
のままにしてください。
ExcelをJSON経由でPandas DataFrameに変換する
Excelの任意の範囲をAspose.Cellsを使用してJSONにエクスポートし、その後そのJSONをPandasに読み込んでDataFrameとして使用します。これは、サービスやパイプラインのために構造化されたJSONの引き渡しが必要なときに便利です。
以下の手順に従って、ExcelをJSON経由でpandasのDataFrameに変換します:
- 新しいワークブックを作成し、最初のワークシートを取得して、サンプル値を追加します。
- デフォルトで
JsonSaveOptions
を作成します。 exportrangetojson()
メソッドを使用して、使用されている範囲を JSON 文字列にエクスポートします。pd.readjson(io.StringIO(jsontext))
メソッドを使用して、JSON 文字列を DataFrame に読み込みます。- 必要に応じてDataFrameを検査または処理します。
以下のコード例は、PythonでExcelをJSONを介してpandas DataFrameに変換する方法を示しています:
import io
import pandas as pd
from aspose.cells.utility import JsonUtility # JSON export utility
from aspose.cells import Workbook, JsonSaveOptions, License
# 新しいワークブックを作成し、最初のワークシートにアクセスします。
workbook = Workbook()
worksheet = workbook.worksheets.get(0)
# ワークシートのセルを取得する
cells = worksheet.cells
# Populate a small table (headers + rows)
cells.get("A1").value = "Name"
cells.get("B1").value = "Age"
cells.get("C1").value = "City"
cells.get("A2").value = "Alice"
cells.get("B2").value = 25
cells.get("C2").value = "New York"
cells.get("A3").value = "Bob"
cells.get("B3").value = 30
cells.get("C3").value = "San Francisco"
cells.get("A4").value = "Charlie"
cells.get("B4").value = 35
cells.get("C4").value = "Los Angeles"
# JSON保存オプションを設定します(シンプルなテーブルの場合はデフォルトで問題ありません)。
json_save_options = JsonSaveOptions()
# 使用されている範囲をJSON文字列にエクスポートします。
# maxdisplayrange はデータを含む完全な長方形の領域を取得します。
json_text = JsonUtility.export_range_to_json(cells.max_display_range, json_save_options)
# JSON文字列をPandas DataFrameに読み込む
# パンダはJSON文字列を直接解析できます。
df = pd.read_json(io.StringIO(json_text))
# データフレームを使用してください
print(df)
Output
Name Age City
0 Alice 25 New York
1 Bob 30 San Francisco
2 Charlie 35 Los Angeles
無料ライセンスを取得する
Aspose.Cells for Python via .NETの機能制限なしで評価するには、無料の一時ライセンスを適用してください。完全な機能をアンLOCKするには、temporary license pageを訪れてください。これにはJSONインポート(JsonUtility
)、レイアウト制御(JsonLayoutOptions
)、スキーマの保持、数値/日付の変換が含まれます。
追加の無料リソース
以下のリソースを利用して、Aspose.Cells for Pythonを使用したJSONインポート、レイアウトオプション、およびその他のExcel操作についてさらに深く探求することができます。
結論
Aspose.Cells for Pythonを使えば、JSONをPandasのDataFrameに変換するのが簡単になります。ネストされた構造の信頼性の高い処理、スキーマの安定性に関するオプション、必要に応じてExcelへのエクスポートへの容易な道が得られます。Pandasの柔軟性とAspose.Cells内のJSON/Excelパイプラインを組み合わせて、データ処理を簡素化し、Pythonで強力な分析を実現しましょう。
質問がある場合は、私たちの free support forum を訪れてください。お手伝いできることが嬉しいです。