我使用pandas函数.to_json将数据从dataframe写入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}
答案 0 :(得分:1)
您可以迭代数据框以删除空列并创建字典列表。
然后使用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)
答案 1 :(得分:1)
singledispatch
是您的朋友,您可以使用此功能处理不同数据类型中的null
/ None
个案,并使用一个函数(您可以在数据框,dict,文件,或者json string)。
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)
答案 2 :(得分:1)
最好的方法是检查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()
函数还返回将要删除的键的值。