如何在Python中将DataFrame转换为不含None/NaN的字典?
解决方案
步骤1:构造示例DataFrame
先还原你的数据结构(将id转为字符串类型以匹配预期输出格式):
import pandas as pd import numpy as np df = pd.DataFrame({ 'id': [2, 3, 4, 56], 'title': ['xyz', 'ghy', None, 'ghy'], 'url': ['www.xyz.com', np.nan, np.nan, 'www.ghy.com'], 'timed': ['2024-02-01T00:00:00Z', '2024-03-05T00:00:00Z', '2024-04-05T00:00:00Z', '2024-05-05T00:00:00Z'] }) # 转换id为字符串类型 df['id'] = df['id'].astype(str)
方法1:apply+字典推导式(推荐)
逐行遍历DataFrame,直接过滤掉值为None或NaN的键值对:
# 生成过滤后的字典列表 filtered_dicts = df.apply( lambda row: {k: v for k, v in row.items() if v is not None and not pd.isna(v)}, axis=1 ).tolist() # 按预期格式输出每个字典 for d in filtered_dicts: print(d)
方法2:先转字典列表再过滤
先将DataFrame转为原始字典列表,再逐个清理无效值:
# 转为原始字典列表 raw_dicts = df.to_dict('records') # 过滤每个字典中的None/NaN filtered_dicts = [] for d in raw_dicts: cleaned = {k: v for k, v in d.items() if v is not None and not pd.isna(v)} filtered_dicts.append(cleaned) # 输出结果 for d in filtered_dicts: print(d)
最终输出
两种方法都会得到你期望的结果:
{"id":"2","title":"xyz","url":"www.xyz.com","timed":"2024-02-01T00:00:00Z"} {"id":"3","title":"ghy","timed":"2024-03-05T00:00:00Z"} {"id":"4","timed":"2024-04-05T00:00:00Z"} {"id":"56","title":"ghy","url":"www.ghy.com","timed":"2024-05-05T00:00:00Z"}
内容的提问来源于stack exchange,提问作者emiley mille
相关产品推荐
相关产品推荐

