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

如何用Python和Pandas将文本文件跨行的源名与数据合并为DataFrame

解决方法

你的问题出在原文件是名称行+数据行交替出现,而pd.read_csv默认把每行当成一条完整记录,直接读会导致字段错位。可以先把成对的行合并,再转成DataFrame,具体步骤如下:

步骤1:读取并清理文件内容

先把文件里的所有行读进来,去掉空行和多余的换行、空格:

import pandas as pd

path = "你的文件路径/"  # 替换成实际路径
with open(path + 'combined.txt', 'r') as f:
    # 过滤空行,同时去掉每行首尾的空白字符
    lines = [line.strip() for line in f if line.strip()]

步骤2:合并成对的名称和数据行

把相邻的名称行和数据行拼接成一行:

combined_rows = []
# 步长为2遍历,每次取名称行和下一行的数据行
for i in range(0, len(lines), 2):
    name = lines[i]
    data = lines[i+1]
    combined_rows.append(f"{name} {data}")

步骤3:转换为DataFrame

可以用StringIO把合并后的内容当成文本流,再用read_csv读取:

from io import StringIO

# 把合并后的行拼成字符串,用换行分隔
csv_content = '\n'.join(combined_rows)
# 用空格作为分隔符读取,指定列名
df = pd.read_csv(StringIO(csv_content), sep='\s+', names=['name', 'vol1', 'vol2', 'vol3'])

# 可选:把数值列转为浮点型(默认可能是字符串)
df[['vol1', 'vol2', 'vol3']] = df[['vol1', 'vol2', 'vol3']].astype(float)

或者更直接地构建列表再转DataFrame:

data_list = []
for i in range(0, len(lines), 2):
    # 拆分数据行,和名称一起组成列表
    row_data = [lines[i]] + lines[i+1].split()
    data_list.append(row_data)

df = pd.DataFrame(data_list, columns=['name', 'vol1', 'vol2', 'vol3'])
df[['vol1', 'vol2', 'vol3']] = df[['vol1', 'vol2', 'vol3']].astype(float)

最终得到的DataFrame结构如下:

name   vol1    vol2      vol3
0  name_of_source  128.0  1024.0  225.569918
1 name_of_source_2  140.0  1120.0  229.085200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:45:31