3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Polarsでjsonlファイルを読み書きする

Posted at

最近PolarsというRust製の高速データフレームライブラリが流行っているようです。今回はPandasでのjsonlの読み込み方に倣って、Polarsでjsonlファイルを扱ってみます。

JSON Linesとは

JSON Linesとは、改行区切りで1行1JSONオブジェクトという形式で定義されたファイルで、拡張子は.jsonlを使います(参考:JSON Lines, atatus JSONL)。以下にjsonlファイル例を示します。

sample.jsonl
 {"id": "0000000", "name": "hoge", "content": "toto"}
 {"id": "0000001", "name": "piyo", "content": "titi"}
 {"id": "0000002", "name": "fuga", "content": "tutu"}

Pandasでは、以下にようにしてjsonlファイルを読み書きします1

import pandas as pd
df = pd.read_json('sample.jsonl', orient='records', lines=True) # 読み
df.to_json('hoge.jsonl', orient='records', force_ascii=False, lines=True) # 書き

しかし、Polarsのread_jsonメソッドのドキュメントには、これらのキーワード引数は存在しません。

Polarsでの読み書き方法

結論からいくと、以下のようになります。

import polars as pl
df = pl.read_ndjson('sample.jsonl') # 読み(先行評価)
df.write_ndjson('hoge.jsonl')       # 書き
df = pl.scan_ndjson('sample.jsonl') # 読み(遅延評価)

read_ndjsonメソッドで改行区切りJSONファイルを読み込むことができます。
それはいいのですが、このNDJSONというのがよくわからなかったので以下にまとめます。

NDJSONとは

NDJSONとは、newline delimited JSONの略です。JSONLからフォークされたものらしいですが、JSONLと同じと思って問題ないのだと思います。

まとめ

JSONLかNDJSONかどっちかにすることはできなかったのだろうか。

  1. orientは入力ファイルの形式を指定でき、linesは1行ずつ出力するか決めるオプションです(参考:qtatsuの速報 pythonでJSON Linesを作る方法, note.nkmk.me pandas.DataFrameをJSON文字列・ファイルに変換・保存(to_json)
    )。

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?