首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >去掉json输出中的空值列

问去掉json输出中的空值列
EN

Stack Overflow用户
提问于 2018-05-25 13:51:12
回答 3查看 2.7K关注 0票数 2

我使用熊猫函数.to_json将数据从dataframe写入json文件,如下所示:

代码语言:javascript
复制
xx.to_json('file_path',orient='records',lines=True)

它的输出如下:

代码语言:javascript
复制
{"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}

如果有空值,如何处理输出中的列?:

代码语言:javascript
复制
{"state":4.0,"t":1527237121263}
{"t":1527237121264,"target_speed":400.0}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-25 15:07:07

最好的方法是检查dict中的每个元素,并删除具有空值的键。看起来会是这样的。

代码语言:javascript
复制
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()函数还返回要删除的键的值。

票数 2
EN

Stack Overflow用户

发布于 2018-05-25 14:10:41

您可以迭代数据,以删除空列并创建字典列表。

然后使用json模块将列表写入文件。

代码语言:javascript
复制
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) 
票数 1
EN

Stack Overflow用户

发布于 2018-05-25 14:52:12

singledispatch是您的朋友,您可以用一个函数来处理不同数据类型中的null/None情况(您可以在dataframe、dict、file或json字符串上这样做)。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50530759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档