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

如何用Pandas读取列数可变的文本文件并生成DataFrame?

解决方法:拆分文件内容为多个DataFrame

你的问题根源在于文件包含3种不同列数的结构化数据块,直接用read_csv一次性读取会因为列数不匹配报错。要保留所有行的同时正确解析,我们可以先手动拆分不同的数据块,再分别构建DataFrame。

具体实现步骤

  1. 先读取文件的所有行,按制表符分割字段;
  2. 根据每行的字段数量,拆分出三个独立的数据块(基本参数、时间参数、航点列表);
  3. 为每个块单独创建DataFrame,保留各自的表头和数据。
import pandas as pd

# 读取目标文件的所有行,过滤空行并按制表符拆分字段
file_path = "D:/waypoints/route/" + file[0]
with open(file_path, 'r') as f:
    # 处理每一行:去除首尾空白,按制表符分割成字段列表
    all_lines = [line.strip().split('\t') for line in f if line.strip()]

# 拆分第一个数据块:船舶基本参数(6列,前2行)
block1_header = all_lines[0]
block1_data = [all_lines[1]]  # 转成列表格式适配DataFrame构造
df_basic = pd.DataFrame(block1_data, columns=block1_header)

# 拆分第二个数据块:时间参数(10列,第3-4行)
block2_header = all_lines[2]
block2_data = [all_lines[3]]
df_time = pd.DataFrame(block2_data, columns=block2_header)

# 拆分第三个数据块:航点列表(20列,从第5行开始)
block3_header = all_lines[4]
block3_data = all_lines[5:]
df_waypoints = pd.DataFrame(block3_data, columns=block3_header)

说明

  • 三个DataFrame分别对应文件里的三类信息:df_basic存储船舶功率、速度等基础配置,df_time存储出发/到达时间,df_waypoints存储所有航点的详细数据;
  • 这种方式完全保留了文件的所有内容,不需要跳过任何行;
  • 如果确实需要把所有数据合并到一个DataFrame,建议给每个块添加一个data_type标识列(比如"basic_info"、"time_info"、"waypoint"),再用pd.concat合并,但从数据逻辑来说,分开存储会更清晰易用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:18:13