将Pandas字典字符串序列转换为0/1数值列(判断列表非空)
需求说明
现有一个包含字典字符串的Pandas Series,需要将其拆分为a列和b列。规则为:若字典中对应键的列表为空则列值为0,否则为1。
输入示例
list = ["{'a': [], 'b': []}", "{'a': [{'c':3,'d':56}], 'b': []}", "{'a': [], 'b': [{'c':45,'d':67}]}", "{'a': [{'c':48,'d':676}], 'b': [{'c':29,'d':90}]}"] df = pd.DataFrame(data=list,columns=['A'])
预期输出
| a | b |
|---|---|
| 0 | 0 |
| 1 | 0 |
| 0 | 1 |
| 1 | 1 |
解决方法
直接通过字符串解析+条件判断实现,代码如下:
import pandas as pd import ast # 处理输入数据 df['a'] = df['A'].apply(lambda x: 1 if ast.literal_eval(x)['a'] else 0) df['b'] = df['A'].apply(lambda x: 1 if ast.literal_eval(x)['b'] else 0) # 提取目标列 result = df[['a', 'b']] print(result)
关键说明
ast.literal_eval():安全解析字符串形式的字典,避免直接使用eval()带来的风险;- 匿名函数
lambda:快速判断列表是否非空,非空返回1,空则返回0。
内容的提问来源于stack exchange,提问作者Swetha
相关产品推荐
相关产品推荐

