Pandas读取CSV生成嵌套JSON供Elasticsearch使用的空值处理问题
解决Pandas转JSON时空值变为null的问题
适配方案(兼容你当前使用的Pandas 1.1.3版本)
你只需要在读取CSV后、构造嵌套org字段前,用fillna()方法把所有识别到的空值替换为你需要的指定字符串即可,修改后代码如下:
import pandas as pd import json import os csv = "/Users/me/file.csv" csv_file = pd.read_csv(csv, sep=",", header=0, index_col=False) # 新增行:把所有NaN空值替换为指定字符串,可按需改为"none"或其他值 csv_file = csv_file.fillna("N/A") # 如果需要不同字段用不同的替换值,可以改用字典传参: # csv_file = csv_file.fillna({"data": "none", "type": "N/A", "location": "-"}) csv_file['org'] = csv_file[['data', 'type']].apply(lambda s: s.to_dict(), axis=1) csv_file[['id', 'org', 'location']].to_json("file.json", orient="records", lines=True, date_format="iso", double_precision=10, force_ascii=True, date_unit="ms", default_handler=None)
原理解释
read_csv会自动把CSV中的空白值识别为NaN格式的空值,转JSON时会默认序列化为nullfillna()会把所有NaN统一替换为你指定的字符串,后续生成嵌套字典、转JSON时都会保留该字符串,不会再出现null值- 如果你有自定义的空值标识(比如CSV里用"无"、"empty"代表空),可以搭配
na_values参数先把这些值识别为NaN,再用fillna统一替换即可
内容的提问来源于stack exchange,提问作者Stpete111
相关产品推荐
相关产品推荐

