如何用Pandas加载字段换行的非固定宽度报表表格数据?
处理固定宽度且字段换行的文本数据加载问题
当固定宽度格式的文本中存在字段内容过长导致后续字段换行的情况时,直接使用pd.read_csv或pd.read_fwf会解析错误,需要先预处理文本合并换行内容,再进行加载。
解决方案步骤
- 预处理文本:识别并合并那些属于上一行的换行内容(这类行通常以空格开头)
- 使用
read_fwf加载:对处理后的文本用固定宽度读取方法加载
完整代码示例
import pandas as pd import io # 测试文本数据 str_test = """ -------------------------------------------------------- Name Address Email Phone --------------------------------------------------------- Andrew Rye,Colorado andrew_brendon_tye@hotmail.com 4574478 Eddie White Sulphur Springs,West Virginia eddie.t@gmail.com 4678990 """ # 1. 预处理文本:过滤无效行并合并换行内容 lines = [line.rstrip('\n') for line in str_test.splitlines() if line.strip() and not line.startswith('---')] processed_lines = [] for line in lines: if line.startswith(' '): processed_lines[-1] += line else: processed_lines.append(line) processed_text = '\n'.join(processed_lines) # 2. 用read_fwf加载数据(可选手动指定列宽提升精准度) # 自动识别列宽 df = pd.read_fwf(io.StringIO(processed_text), header=0) # 或手动指定列宽(根据原表格实际宽度调整) # df = pd.read_fwf(io.StringIO(processed_text), header=0, widths=[10, 20, 25, 10]) # 查看结果 print(df)
输出结果
Name Address Email Phone 0 Andrew Rye,Colorado andrew_brendon_tye@hotmail.com 4574478 1 Eddie White Sulphur Springs,West Virginia eddie.t@gmail.com 4678990
内容的提问来源于stack exchange,提问作者Yadu Krishnan
相关产品推荐
相关产品推荐

