如何将Pandas DataFrame的字符串列按条件转换为字典,过滤值为0的键值对
错误原因
- 直接调用
dict(df["value"])是将整个value列的Series对象转为字典,会把行索引作为字典键,完全不符合单条字符串转字典的需求,因此报错。 - 调用
json.loads失败是因为你的value字符串不符合JSON规范:没有外层大括号,键也没有用引号包裹,无法被JSON解析器识别。
实现方案
方案1:高性能写法(适配百万行级数据,性能远高于apply)
直接通过列表推导式逐行处理,避免pandas apply的额外调度开销:
df["value"] = [ {int(k): int(v) for k, v in (pair.split(":") for pair in s.split(",")) if int(v) != 0} for s in df["value"].tolist() ]
方案2:函数封装版(便于复用、易读)
def parse_value_str(s: str) -> dict: res = {} for kv_pair in s.split(","): k, v = kv_pair.split(":") v_int = int(v) if v_int != 0: res[int(k)] = v_int return res df["value"] = df["value"].apply(parse_value_str)
内容的提问来源于stack exchange,提问作者skulldoger
相关产品推荐
相关产品推荐

