bugfix> python > 投稿

私はこのようなパンダ関数.to_jsonを使用してデータフレームからjsonファイルにデータを書いています:

xx.to_json('file_path',orient='records',lines=True)

この出力は次のようになります。

{"speed":null,"state":4.0,"stop_trigger":null,"t":1527237121263,"target_speed":null}
{"speed":null,"state":null,"stop_trigger":null,"t":1527237121264,"target_speed":400.0}

null値がある場合、出力の列を削除するにはどうすればよいですか?:

{"state":4.0,"t":1527237121263}
{"t":1527237121264,"target_speed":400.0}

回答 3 件
  • 最善の方法は、dict内のすべての要素をチェックし、null値を持つキーを削除することです。これは次のようになります。

    with open('data.json') as f:
        json_dict = json.load(f)
    for key in json_dict:
        if json_dict[key] is Null:
             json_dict.pop(key)
    
    

    json_dict[key] を使用  キーの値を取得し、 pop() で  関数を辞書から削除します。ザ・ pop()  関数は、削除されるキーの値も返します。

  • データフレームを繰り返してnull列を削除し、辞書のリストを作成できます。

    次に、 json を使用します  リストをファイルに書き込むモジュール。

    import pandas as pd
    import json
    df = pd.DataFrame([[np.nan, 4.0, np.nan, 1527237121263, np.nan],
                       [np.nan, np.nan, np.nan, 1527237121264, 400.0]],
                      columns=['speed', 'state', 'stop_trigger', 't', 'target_speed'])
    d = [dict(row.dropna()) for idx, row in df.iterrows()]
    with open('file.json', 'w') as fp:
        json.dump(d, fp)
    
    

  • singledispatch  あなたの友達です。これを使用して null を処理できます / None  1つの関数で異なるデータ型の場合(データフレーム、dict、ファイル、またはjson文字列でこれを行うことができます)。

    import os
    import json
    from functools import singledispatch
    
    @singledispatch
    def remove_null_bool(ob):
        return ob
    @remove_null_bool.register(list)
    def _process_list(ob):
        return [remove_null_bool(v) for v in ob if v is not None]
    @remove_null_bool.register(dict)
    def _process_list(ob):
        return {k: remove_null_bool(v) for k, v in ob.items() if v is not None}
    
    def cleanse(in_file):
        with open(in_file, 'r') as source:
            source_json = json.load(source)
        with open(in_file, 'w') as source:
            json.dump(remove_null_bool(source_json), source)
    
    

あなたの答え