如何用Python将爬取的陌生格式文本转换为DataFrame?
Python解析特殊格式文本生成DataFrame的最优方法
问题场景
你从浏览器爬取到一段非标准格式的文本:
({:a 186, :b 4, :c "l", :a 6, :b 93, :c "e"})
需要将其转换为结构如下的DataFrame:
a b c 0 186 4 l 1 6 93 e
最优实现方案
通过文本清洗、键值对提取、分组构建的方式实现,逻辑清晰且扩展性强:
import pandas as pd # 原始爬取文本 raw_text = '({:a 186, :b 4, :c "l", :a 6, :b 93, :c "e"})' # 1. 清洗文本:去除首尾括号、替换转义引号、拆分键值项 cleaned_items = raw_text.strip('()').replace('"', '"').split(', ') # 2. 提取并处理键值对 key_value_list = [] for item in cleaned_items: # 拆分键和值(只按第一个空格分割,避免值含空格的情况) key, value = item.split(maxsplit=1) # 去除键前的冒号 key = key.lstrip(':') # 去除值的引号,尝试转换为数字类型 value = value.strip('"') if value.isdigit(): value = int(value) key_value_list.append((key, value)) # 3. 确定列名(取第一组的键,假设每行键顺序一致) column_names = [pair[0] for pair in key_value_list[:3]] # 按列数分组,每组对应一行数据 row_dicts = [dict(key_value_list[i:i+len(column_names)]) for i in range(0, len(key_value_list), len(column_names))] # 4. 生成DataFrame df = pd.DataFrame(row_dicts) print(df)
方案优势
- 适配转义字符:处理了爬取文本中的
"转义引号,保证文本值正确提取 - 类型自动转换:将数字字符串转为整数类型,避免DataFrame全是字符串格式
- 扩展性强:只要每行的键顺序和数量一致,不管列数多少都能自动适配
- 逻辑可调试:每一步操作独立,方便后续修改以适配类似的非标准文本格式
内容的提问来源于stack exchange,提问作者JayRSP
相关产品推荐
相关产品推荐

