5
2

More than 1 year has passed since last update.

pandasでcsvをjson,jsonl, parquetに変換する

Last updated at Posted at 2022-12-13

csvファイルを変換する必要があったため,備忘録的に書きました。
with文を使ったjsonへの変換もできますが,結論としてはpandasが一番楽だと思います。

環境

  • OS:macOS Montery 12.6
  • python:3.10.6
  • scikit-learn:1.1.2
  • pandas:1.4.0
  • pyarrow:10.0.1
  • fastparquet:2022.12.0
  • parquet-cli:1.12.3

 また,vscodeの拡張機能を使用して,Jupyterで実験しました。

データセットの用意

scikit-learnに入っているカリフォルニアの住宅価格のデータセットを使用しました。

from sklearn.datasets import fetch_california_housing
import pandas as pd
housing_data = fetch_california_housing()
df_data = pd.DataFrame(housing_data.data, columns=housing_data.feature_names)
df_data.head()

image.png

このデータをcsvで保存します。

#DataFrameをcsvとして保存する
csv_file = df_data.to_csv("./data.csv", index=0)

csv->json

import pandas as pd
df_data = pd.read_csv("./data.csv")

#json形式で出力する
df_data.to_json("./data_pd.json", orient="records")

csv->jsonl

import pandas as pd
df_data = pd.read_csv("./data.csv")

#jsonl形式で出力する
df_data.to_json("./data_pd.jsonl", orient="records",lines=True)

csv->parquet

pyarrowfastparquetのinstallが必要です。

import pandas as pd
df_data = pd.read_csv("./data.csv")
#parquet形式で出力する
df_data.to_parquet(path="./data.parquet")

正しく出力されたか確認してみましょう。
今回はparquet-cliを使いました。

brewからインストールできます。

# parquet-cliのインストール
brew install parquet-cli
$ parquet head data.parquet

正しく出力できているようです。
image.png

おまけ:pyarrowとfastparquetのインストール

pyarrowfastparquetがinstallされていない場合,to_parquet()を実行すると以下のエラーが表示されます。

     ImportError: Unable to find a usable engine; tried using: 'pyarrow', 'fastparquet'.
     A suitable version of pyarrow or fastparquet is required for parquet support.
     Trying to import the above resulted in these errors:
      - Missing optional dependency 'pyarrow'. pyarrow is required for parquet support. Use pip or conda to install pyarrow.
      - Missing optional dependency 'fastparquet'. fastparquet is required for parquet support. Use pip or conda to install fastparquet.

指示に従って,pipもしくはcondaでインストールしましょう。
私はminiforgeを使用していたので,condaでインストールしました。

conda install pyarrow fastparquet -y

まとめ

pandasめっちゃ便利。
コマンド2,3行でデータの変換ができちゃいます。

書いた後に気づいたのですが,厳密には全てpd.DataFrameを経由しています。csv->pd.DataFrame->jsonが正確な表現ですね。
大きなファイルを変換する場合はread_csv()Out of Memoryのエラーが出る場合があります。
他の方法も探してみます。

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2