pandas如何按|拆分列值、赋值布尔值并转换为字典
Pandas分隔字符串转布尔字典列实现方案
原有代码问题说明
- 多值场景逻辑错误:拆分字符串后循环向列表追加单键字典,最终得到列表嵌套字典结构,没有将所有拆分出的键合并到同一个字典中
- 赋值逻辑无效:直接遍历Series取到的是值拷贝,修改临时变量
v不会同步更新到原DataFrame对应位置 - 冗余判断:不需要单独判断字符串是否包含
|,split('|')对无分隔符的字符串会返回仅含原字符串的单元素列表,逻辑可以统一
修正代码实现
方案1:修正版循环写法(适配原有编码习惯)
直接通过索引定位修改原DataFrame数值,去掉冗余判断,统一用字典推导式生成单字典:
import pandas as pd for idx, val in df['Condition'].items(): # 空值/Null值不做处理 if pd.isna(val) or val == 'Null': continue # 拆分后直接生成所有键对应True的字典 key_list = val.split('|') df.loc[idx, 'Condition'] = {k: True for k in key_list}
方案2:向量化写法(推荐,大数据量性能更优)
用map方法做整列映射,避免显式循环,代码更简洁:
import pandas as pd def convert_str_to_dict(s): if pd.isna(s) or s == 'Null': return s return {k: True for k in s.split('|')} df['Condition'] = df['Condition'].map(convert_str_to_dict)
效果验证
针对给出的样例输入,运行后输出完全匹配预期:
| ID | Condition |
|---|---|
| 1 | Null |
| 2 | {"NP": True} |
| 3 | {"NP": True, "KH": True} |
| 4 | {"KH": True, "PR": True, "MM": True} |
注:样例中写的
{"NP"=True}属于笔误,Python字典标准语法用冒号分隔键值对,如果需要输出JSON格式的字符串而非Python字典对象,可以引入json模块,将生成的字典用json.dumps()转成字符串即可。
内容的提问来源于stack exchange,提问作者unicorn
相关产品推荐
相关产品推荐

