Pythonのpandasライブラリを使って、JSONファイルを読み込んだり、データを操作したり、書き出したりする方法を学びましょう。
この記事では、pandasの基本的な使い方から、具体的なサンプルコードを使った実践的な例まで、初心者でもわかりやすく解説します。
これを読めば、データの読み込みから操作、そして保存までの一連の流れを理解できるようになります。
pandasとは
pandasの概要
pandasは、Pythonでデータ操作や解析を行うための強力なライブラリです。
特に、データフレームと呼ばれる2次元のデータ構造を提供することで、データの読み込み、操作、解析、書き出しを簡単に行うことができます。
pandasは、データサイエンスや機械学習の分野で広く利用されており、データのクリーニングや前処理、統計解析などに非常に便利です。
pandasの主な機能
pandasには多くの機能がありますが、以下に主な機能をいくつか紹介します。
- データの読み込みと書き出し: CSV、Excel、JSON、SQLなど、さまざまな形式のデータを簡単に読み込んだり書き出したりできます。
- データの操作: データのフィルタリング、ソート、グループ化、結合、ピボットテーブルの作成など、多様なデータ操作が可能です。
- 欠損値の処理: 欠損値の検出、削除、補完など、データのクリーニングに役立つ機能が豊富です。
- 統計解析: 基本的な統計量の計算や、時系列データの解析が簡単に行えます。
- 可視化: matplotlibやseabornと連携して、データの可視化を行うことができます。
pandasのインストール方法
pandasを使用するためには、まずライブラリをインストールする必要があります。
pandasはPythonのパッケージ管理システムであるpipを使って簡単にインストールできます。
以下のコマンドを実行してください。
pip install pandas
また、Anacondaを使用している場合は、以下のコマンドでインストールできます。
conda install pandas
インストールが完了したら、以下のようにしてpandasをインポートして使用することができます。
import pandas as pd
これで、pandasの基本的な準備が整いました。
次に、具体的なデータ操作方法について見ていきましょう。
pandasでJSONファイルを読み込む準備
必要なライブラリのインポート
まず、pandasを使ってJSONファイルを読み込むためには、必要なライブラリをインポートする必要があります。
pandasはデータ操作に非常に便利なライブラリで、他にもnumpyなどのライブラリと組み合わせて使うことが多いです。
以下のコードを使って、必要なライブラリをインポートしましょう。
import pandas as pd
import numpy as np
このコードでは、pandasをpd
というエイリアスで、numpyをnp
というエイリアスでインポートしています。
これにより、コードが簡潔になり、読みやすくなります。
サンプルJSONファイルの準備
次に、実際に読み込むためのサンプルJSONファイルを準備します。
JSON(JavaScript Object Notation)は、データを保存するための軽量なフォーマットで、キーと値のペアで構成されています。
以下は、サンプルのJSONデータです。
このデータをsample.json
というファイル名で保存します。
[
{
"name": "John",
"age": 30,
"city": "New York"
},
{
"name": "Anna",
"age": 22,
"city": "London"
},
{
"name": "Mike",
"age": 32,
"city": "Chicago"
}
]
このJSONデータは、3つのオブジェクトから構成されており、それぞれのオブジェクトにはname
、age
、city
というキーが含まれています。
このような形式のJSONファイルを用意することで、pandasを使って簡単にデータを読み込むことができます。
次のセクションでは、実際にpandasを使ってこのJSONファイルを読み込む方法について詳しく解説します。
pandasでJSONファイルを読み込む方法
read_json関数の基本的な使い方
pandasには、JSONファイルを簡単に読み込むための関数としてread_json
が用意されています。
この関数を使うことで、JSON形式のデータをpandasのDataFrameに変換することができます。
read_json関数の引数
read_json関数
には多くの引数がありますが、基本的なものを以下に紹介します。
path_or_buf
: 読み込むJSONファイルのパスまたはバッファ。
URLも指定可能です。
orient
: JSONデータの形式を指定します。
デフォルトは'columns'
です。
typ
: 読み込むデータの型を指定します。
デフォルトは'frame'
で、DataFrameとして読み込みます。
dtype
: 各列のデータ型を指定します。convert_axes
: 軸を適切な型に変換するかどうかを指定します。
デフォルトはTrue
です。
convert_dates
: 日付型のデータを自動的に変換するかどうかを指定します。
デフォルトはTrue
です。
基本的な読み込み例
それでは、基本的な読み込み例を見てみましょう。
以下のコードでは、sample.json
というファイルを読み込んでいます。
import pandas as pd
# JSONファイルのパス
file_path = 'sample.json'
# JSONファイルを読み込む
df = pd.read_json(file_path)
# 読み込んだデータを表示
print(df)
このコードを実行すると、sample.json
の内容がDataFrameとして読み込まれ、表示されます。
JSONファイルの形式に応じた読み込み方法
JSONファイルにはさまざまな形式があります。
pandasのread_json関数
は、これらの形式に応じてデータを読み込むことができます。
レコード形式のJSON
レコード形式のJSONは、各レコードが独立したオブジェクトとして表現される形式です。
以下はレコード形式のJSONの例です。
[
{"name": "Alice", "age": 25, "city": "New York"},
{"name": "Bob", "age": 30, "city": "Los Angeles"},
{"name": "Charlie", "age": 35, "city": "Chicago"}
]
この形式のJSONを読み込むには、orient
引数に'records'
を指定します。
import pandas as pd
# JSONファイルのパス
file_path = 'records.json'
# JSONファイルを読み込む
df = pd.read_json(file_path, orient='records')
# 読み込んだデータを表示
print(df)
テーブル形式のJSON
テーブル形式のJSONは、データが行と列の形式で表現される形式です。
以下はテーブル形式のJSONの例です。
{
"columns": ["name", "age", "city"],
"data": [
["Alice", 25, "New York"],
["Bob", 30, "Los Angeles"],
["Charlie", 35, "Chicago"]
]
}
この形式のJSONを読み込むには、orient
引数に'split'
を指定します。
import pandas as pd
# JSONファイルのパス
file_path = 'table.json'
# JSONファイルを読み込む
df = pd.read_json(file_path, orient='split')
# 読み込んだデータを表示
print(df)
オリエンテーションの指定
read_json関数
のorient
引数を使うことで、さまざまなJSON形式に対応することができます。
以下に、orient
引数の主なオプションを紹介します。
形式 | 説明 |
---|---|
‘split’ | 列、インデックス、データを分割して表現する形式 |
‘records’ | 各レコードが独立したオブジェクトとして表現される形式 |
‘index’ | インデックスをキーとする辞書形式 |
‘columns’ | 列をキーとする辞書形式 (デフォルト) |
‘values’ | 値のみのリスト形式 |
例えば、orient='index'
を指定してJSONファイルを読み込む場合は以下のようになります。
import pandas as pd
# JSONファイルのパス
file_path = 'index.json'
# JSONファイルを読み込む
df = pd.read_json(file_path, orient='index')
# 読み込んだデータを表示
print(df)
このように、read_json関数
のorient
引数を適切に設定することで、さまざまな形式のJSONファイルを簡単に読み込むことができます。
読み込んだデータの操作と確認
pandasを使ってJSONファイルを読み込んだ後、そのデータを操作し、確認する方法について解説します。
データフレームの基本操作から、特定の列の選択や条件に基づくフィルタリングまで、具体的な例を交えて説明します。
データフレームの基本操作
データの表示
まず、読み込んだデータを表示する方法を見てみましょう。
データフレームの内容を確認するためには、headメソッド
やtailメソッド
を使用します。
import pandas as pd
# JSONファイルを読み込む
df = pd.read_json('sample.json')
# 最初の5行を表示
print(df.head())
# 最後の5行を表示
print(df.tail())
headメソッド
はデータフレームの最初の5行を、tailメソッド
は最後の5行を表示します。
引数を指定することで、表示する行数を変更することもできます。
データの型確認
データフレームの各列のデータ型を確認するには、dtypes
属性を使用します。
# 各列のデータ型を表示
print(df.dtypes)
このようにすることで、各列がどのデータ型であるかを確認できます。
例えば、整数型、浮動小数点型、文字列型などが表示されます。
データの統計情報
データフレームの統計情報を確認するには、describeメソッド
を使用します。
このメソッドは、数値データの基本的な統計情報(平均、標準偏差、最小値、最大値など)を表示します。
# 数値データの統計情報を表示
print(df.describe())
このメソッドを使用することで、データの分布や傾向を簡単に把握することができます。
データのフィルタリングと選択
特定の列の選択
データフレームから特定の列を選択するには、列名を指定します。
複数の列を選択する場合は、列名のリストを渡します。
# 特定の列を選択
selected_column = df['column_name']
print(selected_column)
# 複数の列を選択
selected_columns = df[['column_name1', 'column_name2']]
print(selected_columns)
このようにすることで、必要な列だけを抽出して操作することができます。
条件に基づくフィルタリング
条件に基づいてデータをフィルタリングするには、条件式を使用します。
例えば、特定の列の値がある条件を満たす行だけを抽出することができます。
# 条件に基づいてフィルタリング
filtered_data = df[df['column_name'] > 10]
print(filtered_data)
この例では、column_name
の値が10より大きい行だけが抽出されます。
複数の条件を組み合わせることも可能です。
# 複数の条件を組み合わせてフィルタリング
filtered_data = df[(df['column_name1'] > 10) & (df['column_name2'] == 'value')]
print(filtered_data)
このようにすることで、より複雑な条件に基づいてデータを抽出することができます。
以上が、pandasを使ってJSONファイルを読み込んだ後のデータの操作と確認方法です。
これらの基本操作をマスターすることで、データの分析や処理が効率的に行えるようになります。
JSONファイルの書き出し
pandasを使ってデータを操作した後、そのデータをJSONファイルとして保存することができます。
これにはto_json関数
を使用します。
ここでは、to_json関数
の使い方と、書き出し形式の指定方法について詳しく解説します。
to_json関数の使い方
to_json関数の引数
to_json関数
は、データフレームをJSON形式でファイルに書き出すための関数です。
主な引数は以下の通りです:
path_or_buf
: 書き出すファイルのパス。
省略すると文字列として返されます。
orient
: JSONの形式を指定します。
デフォルトは'columns'
です。
date_format
: 日付のフォーマットを指定します。
デフォルトは'epoch'
です。
double_precision
: 浮動小数点数の精度を指定します。
デフォルトは10です。
force_ascii
: ASCII文字のみを使用するかどうかを指定します。
デフォルトはTrueです。
date_unit
: 日付の単位を指定します。
デフォルトは'ms'
です。
default_handler
: デフォルトのハンドラを指定します。
基本的な書き出し例
まずは、基本的な書き出し例を見てみましょう。
以下のコードでは、データフレームをJSONファイルに書き出しています。
import pandas as pd
# サンプルデータフレームの作成
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# データフレームをJSONファイルに書き出し
df.to_json('output.json')
このコードを実行すると、output.json
というファイルが作成され、データフレームの内容がJSON形式で保存されます。
書き出し形式の指定
to_json関数
のorient
引数を使用して、JSONの書き出し形式を指定することができます。
主な形式は以下の通りです:
形式 | 説明 |
---|---|
‘split’ | 列、インデックス、データを分割して書き出します。 |
‘records’ | 各行を辞書形式で書き出します。 |
‘index’ | インデックスをキーとして書き出します。 |
‘columns’ | 列をキーとして書き出します (デフォルト)。 |
‘values’ | 値のみをリスト形式で書き出します。 |
‘table’ | テーブル形式で書き出します。 |
レコード形式での書き出し
レコード形式で書き出す場合、orient
引数に'records'
を指定します。
以下のコードはその例です:
# レコード形式での書き出し
df.to_json('output_records.json', orient='records')
このコードを実行すると、output_records.json
というファイルが作成され、各行が辞書形式で保存されます。
テーブル形式での書き出し
テーブル形式で書き出す場合、orient
引数に'table'
を指定します。
以下のコードはその例です:
# テーブル形式での書き出し
df.to_json('output_table.json', orient='table')
このコードを実行すると、output_table.json
というファイルが作成され、データフレームがテーブル形式で保存されます。
以上が、pandasを使ってJSONファイルにデータを書き出す方法です。
to_json関数
を使うことで、さまざまな形式でデータを保存することができます。
これにより、データの共有や保存が簡単になります。
実践例
ここでは、実際のデータを使ってpandasでJSONファイルを読み込み、操作し、書き出す一連の流れを解説します。
具体的なサンプルコードとその実行結果を示しながら進めていきますので、ぜひ手元で実行してみてください。
実際のデータを使った例
まずは、サンプルのJSONデータを用意します。
このデータは、架空の社員情報を含んでいます。
[
{"id": 1, "name": "佐藤", "age": 28, "department": "営業"},
{"id": 2, "name": "鈴木", "age": 34, "department": "開発"},
{"id": 3, "name": "高橋", "age": 25, "department": "人事"},
{"id": 4, "name": "田中", "age": 30, "department": "営業"},
{"id": 5, "name": "伊藤", "age": 29, "department": "開発"}
]
このJSONデータを employees.json
というファイル名で保存します。
データの読み込み
まずは、pandasを使ってこのJSONファイルを読み込みます。
import pandas as pd
# JSONファイルの読み込み
df = pd.read_json('employees.json')
# データの表示
print(df)
実行結果は以下のようになります。
id name age department
0 1 佐藤 28 営業
1 2 鈴木 34 開発
2 3 高橋 25 人事
3 4 田中 30 営業
4 5 伊藤 29 開発
データの操作
次に、読み込んだデータを操作してみましょう。
ここでは、以下の操作を行います。
- 年齢が30歳以上の社員をフィルタリング
- 部署ごとの平均年齢を計算
# 年齢が30歳以上の社員をフィルタリング
age_above_30 = df[df['age'] >= 30]
print("年齢が30歳以上の社員:")
print(age_above_30)
# 部署ごとの平均年齢を計算
average_age_by_department = df.groupby('department')['age'].mean()
print("\n部署ごとの平均年齢:")
print(average_age_by_department)
実行結果は以下のようになります。
年齢が30歳以上の社員:
id name age department
1 2 鈴木 34 開発
3 4 田中 30 営業
部署ごとの平均年齢:
department
人事 25.0
営業 29.0
開発 31.5
Name: age, dtype: float64
データの書き出し
最後に、操作したデータを新しいJSONファイルに書き出します。
ここでは、年齢が30歳以上の社員のデータを employees_above_30.json
というファイルに書き出します。
# 年齢が30歳以上の社員のデータをJSONファイルに書き出し
age_above_30.to_json('employees_above_30.json', orient='records', force_ascii=False, indent=4)
このコードを実行すると、 employees_above_30.json
というファイルが作成され、以下の内容が保存されます。
[
{
"id": 2,
"name": "鈴木",
"age": 34,
"department": "開発"
},
{
"id": 4,
"name": "田中",
"age": 30,
"department": "営業"
}
]
以上で、pandasを使ったJSONファイルの読み込み、操作、書き出しの一連の流れを解説しました。
実際に手を動かして試してみることで、pandasの使い方に慣れていきましょう。