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

Pandas读取类字典结构TXT文件 清洗含':'列整理为规范DataFrame

解决方案

推荐方案:逐行解析类字典结构

初始方案使用空格作为分隔符读入文件,会天然将带内部空格的集合值拆分为多个列碎片,后续需要额外开发碎片拼接逻辑,冗余度高。直接逐行解析文本为字典结构再转换为DataFrame,可一次性完成所有规整需求,步骤如下:

  • 逐行读取TXT文件,直接过滤空行与包含Iteration的无关行
  • 清洗每行字符串:移除首尾空白、行尾冗余逗号,保证字符串符合Python字典语法规范
  • 用ast.literal_eval将类字典字符串安全转换为Python字典,字典的键即为6:30/7:00格式的时间戳,值即为对应的数字集合
  • 传入字典列表构建DataFrame,直接得到列名为时间、单元格值为集合的规整二维表

实现代码:

import pandas as pd
import ast

row_records = []
with open('results.txt', 'r', encoding='utf-8') as f:
    for line in f:
        stripped_line = line.strip()
        # 跳过无效行
        if not stripped_line or 'Iteration' in stripped_line:
            continue
        # 移除行尾逗号,适配字典语法
        if stripped_line.endswith(','):
            stripped_line = stripped_line[:-1]
        # 字符串转字典
        row_records.append(ast.literal_eval(stripped_line))

result_df = pd.DataFrame(row_records)

该方案无需额外执行删列、集合碎片拼接、列名替换操作,所有处理逻辑在解析阶段一次性完成。

原有读入方案的报错修复

如果需要沿用read_csv空格分隔读入的处理流程,删除含:列的正确实现如下:
核心逻辑为将整个DataFrame转换为字符串类型后,逐元素判断是否包含:,再按列聚合判断是否存在命中单元格,最终筛选保留无匹配的列:

# 生成列保留掩码:任意单元格包含':'的列均标记为不保留
col_keep_mask = ~data.astype(str).apply(lambda col: col.str.contains(':')).any()
data = data.loc[:, col_keep_mask]

该方案后续需要逐行扫描拼接被拆分的集合片段、手动对齐时间戳作为列名,逻辑复杂度高,无特殊需求不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:15:41