Избавьтесь от столбцов с нулевым значением в выводе json - PullRequest
0 голосов
/ 25 мая 2018

Я записываю данные из фрейма данных в файл json, используя функцию панд .to_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}

Как этоможно ли избавиться от столбцов в выводе, если есть нулевые значения?:

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

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

singledispatch - ваш друг, вы можете использовать это для обработки null / None дел в разных типах данных с помощью одной функции (вы можете сделать это на кадре данных, в файле, файле,или строка 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)
0 голосов
/ 25 мая 2018

Лучший способ - проверить каждый элемент в dict и удалить ключи с нулевым значением.Это будет выглядеть примерно так:

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() также возвращает значение ключа, который будет удален.

0 голосов
/ 25 мая 2018

Вы можете перебрать свой фрейм данных, чтобы удалить пустые столбцы и создать список словарей.

Затем используйте модуль 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...