You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用apply的情况下将Pandas单元格值转为字典并保留原值

用向量化方法将Pandas列转换为字典格式

需求回顾

你有包含字符串和NaN值的DataFrame列:

import pandas as pd
import numpy as np

df = pd.DataFrame({'column': ['a', 'b', np.nan, 'c']})

需要将其转换为每个元素是{'key': 值}的字典,其中NaN对应{'key': None},最终效果:

df['column'] = [{'key': 'a'}, {'key': 'b'}, {'key': None}, {'key': 'c'}]

向量化解决方案

方法1:结合fillna与列表推导式(高效推荐)

先通过向量化的fillna将所有NaN替换为None,再用列表推导式批量生成字典:

# 向量化替换NaN为None
processed_col = df['column'].fillna(None)
# 批量生成字典列表
df['column'] = [{'key': val} for val in processed_col]

如果需要同时处理空字符串(和你原代码逻辑一致),可以先将空字符串替换为NaN:

# 先替换空字符串为NaN,再转None
processed_col = df['column'].replace('', np.nan).fillna(None)
df['column'] = [{'key': val} for val in processed_col]

方法2:简化版map操作

用map替代apply,逻辑更简洁,比原代码的lambda判断更精简:

df['column'] = df['column'].map(lambda x: {'key': x} if pd.notna(x) else {'key': None})
# 包含空字符串处理的版本
df['column'] = df['column'].map(lambda x: {'key': x} if pd.notna(x) and x != '' else {'key': None})

向量化的优势

你原有的apply方法是逐元素遍历判断,而fillna和replace都是Pandas底层用C实现的向量化操作,在数据量较大时,效率会远高于逐元素的apply;列表推导式则是Python原生的批量操作,比apply的函数调用开销更小。

内容的提问来源于stack exchange,提问作者Valerio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:01:05