如何从Pandas DataFrame字典列提取数值并替换NaN为0?
提取DataFrame字典列的数值并替换NaN为0
现有如下Pandas DataFrame:
| A | B |
|---|---|
| {'all':44} | {'all':16} |
| NaN | {'all':175} |
需求是从各列的字典中提取'all'对应的数值,同时把NaN替换为0。你已经能对单个元素用.values()拿到结果,但不知道怎么批量处理整个DataFrame,这里给你两种实用的方法:
方法一:用applymap自定义处理函数
适合需要自定义逻辑的场景,比如键不固定或者需要额外判断的情况:
import pandas as pd # 构造示例DataFrame(已有数据可跳过此步) data = {'A': [{'all':44}, None], 'B': [{'all':16}, {'all':175}]} df = pd.DataFrame(data) # 定义处理单个元素的函数 def extract_dict_value(x): return x['all'] if not pd.isna(x) else 0 # 对整个DataFrame的每个元素应用函数 df_processed = df.applymap(extract_dict_value)
处理后的结果:
| A | B |
|---|---|
| 44 | 16 |
| 0 | 175 |
方法二:用str.get+fillna快速处理
如果所有字典的键都是固定的'all',这个方法更简洁:
# 对每一列提取字典的'all'值,再把NaN替换为0 df_processed = df.apply(lambda col: col.str.get('all').fillna(0))
col.str.get('all')会自动遍历列中的每个元素,提取字典里的'all'值,原本的NaN位置会保留为NaN,最后用fillna(0)统一替换成0,效果和方法一完全一致。
内容的提问来源于stack exchange,提问作者SSD
相关产品推荐
相关产品推荐

