使用Pandas读取含交替多列数表格的空格分隔数据文件遇阻
处理交替出现的不同列数空格分隔表格
我之前处理过类似的混合表格文件,给你一个实用的Python方案,核心思路是逐行识别表格类型,分情况存储数据:
核心实现步骤
- 逐行读取文件,跳过空行和无关描述行(比如
Test、Date、Timestep这类标识行) - 通过表头行(比如你示例里的
No. u v w x)判断当前表格的列数/类型 - 将对应的数据行存入不同的容器,后续还能转换成DataFrame方便分析
代码示例
基础版:分表存储原始数据
# 初始化两个列表分别存储两种表格的数据 table1 = [] # 对应包含x列的表格(5列) table2 = [] # 对应另一种列数的表格 current_table = None with open('your_data_file.txt', 'r') as file: for line in file: stripped_line = line.strip() if not stripped_line: continue # 跳过空行 # 识别表头行,切换当前表格类型 if stripped_line.startswith('No.'): header = stripped_line.split() # 根据列数判断(或者根据是否包含'x'字段判断,更灵活) if len(header) == 5: current_table = table1 table1.append(header) # 保存表头 elif len(header) == 4: current_table = table2 table2.append(header) continue # 跳过无关的描述性行 if any(kw in stripped_line for kw in ['Test', 'Date', 'Timestep']): continue # 处理数据行,确保列数匹配再添加 if current_table is not None: data = stripped_line.split() if len(data) == len(current_table[0]): current_table.append(data) else: print(f"跳过格式错误的行: {stripped_line}")
进阶版:转换成Pandas DataFrame(方便数据分析)
如果需要做后续的数据分析,可以把列表转换成DataFrame:
import pandas as pd # 转换第一种表格 df1 = pd.DataFrame(table1[1:], columns=table1[0]) # 将数值列转为数值类型 numeric_cols1 = table1[0][1:] df1[numeric_cols1] = df1[numeric_cols1].apply(pd.to_numeric) # 转换第二种表格 df2 = pd.DataFrame(table2[1:], columns=table2[0]) numeric_cols2 = table2[0][1:] df2[numeric_cols2] = df2[numeric_cols2].apply(pd.to_numeric) # 查看结果 print("第一种表格数据:") print(df1.head()) print("\n第二种表格数据:") print(df2.head())
注意事项
- 如果表头的标识不是
No.,可以调整判断条件(比如检查是否包含多个字段名,如u、v) - 如果数据行有格式异常,代码里的跳过逻辑可以换成日志记录,方便排查问题
split()方法会自动处理任意数量的空格分隔,不用担心多个空格的问题
内容的提问来源于stack exchange,提问作者Kam
相关产品推荐
相关产品推荐

