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
相关产品推荐
相关产品推荐

