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

解决Pandas混合类型列问题:确保watchedSegments始终为list类型

解决Pandas中watchedSegments列混合字符串与列表类型的问题

要确保watchedSegments列全为<class 'list'>类型,可通过解析字符串格式的列表为实际列表对象实现,具体步骤如下:

1. 导入依赖库

使用ast.literal_eval安全解析字符串形式的Python数据结构:

import ast
import pandas as pd

2. 定义转换函数

编写函数处理每个元素:字符串类型解析为列表,已为列表的直接保留,其他类型统一转为空列表(可按需调整):

def convert_to_list(value):
    if isinstance(value, str):
        try:
            return ast.literal_eval(value)
        except (SyntaxError, ValueError):
            return []
    elif isinstance(value, list):
        return value
    else:
        return []

3. 应用转换到目标列

将函数应用到watchedSegments列,覆盖原列:

views_tmp['watchedSegments'] = views_tmp['watchedSegments'].apply(convert_to_list)

4. 验证转换结果

检查列中元素类型:

print(views_tmp['watchedSegments'].apply(type).tail())

预期输出全为<class 'list'>:

4411    <class 'list'>
4412    <class 'list'>
4413    <class 'list'>
4414    <class 'list'>
4415    <class 'list'>

5. 正常使用explode方法

此时调用explode可正确展开所有行:

print(views_tmp.tail().explode('watchedSegments'))

输出结果:

id               watchedSegments
4411  12559466  {'start': 0, 'end': 17.04}
4412  12559947  {'end': 2645.39, 'start': 0}
4413  12560180  {'end': 1062.17, 'start': 0}
4414  12560397   {'start': 0, 'end': 1.42}
4415  12560861  {'start': 0, 'end': 1242.95}

关键说明

  • ast.literal_eval比eval更安全,仅解析合法Python字面量(列表、字典等),避免执行恶意代码。
  • 异常处理可防止因字符串格式错误导致程序中断,返回值可根据业务需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:45:48