如何在Pandas中拼接多个JSON字典列并忽略空值
解决DataFrame多列字典文本拼接为列表(忽略空值)的问题
给定如下结构的DataFrame(json_1、json_2、json_3为字典格式文本):
id json_1 json_2 json_3 1 {a:b} {a:c} {c:d} 2 {a:b} {b:c} null 3 {a:c} {c:d} {a:g}
需要新增final_json列,将上述三列的非空值拼接为列表,最终得到:
id json_1 json_2 json_3 final_json 1 {a:b} {a:c} {c:d} [{a:b}, {a:c}, {c:d}] 2 {a:b} {b:c} null [{a:b}, {b:c}] 3 {a:c} {c:d} {a:g} [{a:c}, {c:d}, {a:g}]
解决方案
使用pandas的apply方法结合列表推导式,逐行过滤空值并拼接:
import pandas as pd # 构造示例数据(已有DataFrame可跳过此步) data = { 'id': [1, 2, 3], 'json_1': ['{a:b}', '{a:b}', '{a:c}'], 'json_2': ['{a:c}', '{b:c}', '{c:d}'], 'json_3': ['{c:d}', None, '{a:g}'] } df = pd.DataFrame(data) # 生成final_json列 df['final_json'] = df[['json_1', 'json_2', 'json_3']].apply( lambda row: [x for x in row if pd.notna(x)], axis=1 ) # 输出结果 print(df)
补充说明
df[['json_1', 'json_2', 'json_3']]精准选取需要处理的目标列;axis=1指定按行处理数据;- 列表推导式会自动过滤每行中的
None、NaN等空值,保留有效文本并组成列表; - 如果空值是字符串类型的
'null',可修改判断条件为:lambda row: [x for x in row if x not in (None, 'null')]
内容的提问来源于stack exchange,提问作者user2512443
相关产品推荐
相关产品推荐

