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

如何使用Pandas将多空格分隔数据拆分为带列名的DataFrame

问题描述

我的数据每行格式如下:

8,0    0        1     0.000000000  8082  A  WS 24664872 + 8 <- (8,2) 23604576

我希望将数据拆分为带列名的格式:

col1   col2     col3  col4         col5  col6 col7 col8      col9
8,0    0        1     0.000000000  8082  A    WS   24664872  + 8 <- (8,2) 23604576

我是Python数据处理新手,不知道怎么正确分隔列。因为文件很大,我目前用分块处理的代码如下:

import pandas as pd
file_path = "test_data.txt"
chunk_size = 1000000
# column_names = ["col1", "col2", "col3"]

df_list = []

for chunk in pd.read_csv(file_path, chunksize=chunk_size):
    df_list.append(chunk)

df = pd.concat(df_list)

for row in df.iterrows():
    print(row)
解决方案

你的问题核心是原数据为多空格分隔,但最后一列col9包含空格,不能直接用默认的分隔逻辑。下面提供两种可靠的分块处理方案:

方案1:正则分隔符处理

利用正则匹配任意数量的空格作为分隔符,同时指定列名,确保最后一列完整保留:

import pandas as pd

file_path = "test_data.txt"
chunk_size = 1000000
column_names = ["col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9"]

df_list = []

for chunk in pd.read_csv(
    file_path,
    chunksize=chunk_size,
    sep=r'\s+',  # 匹配一个或多个连续空格
    header=None,  # 原始文件无表头
    names=column_names,
    engine='python'  # Python引擎支持正则分隔符
):
    df_list.append(chunk)

df = pd.concat(df_list)
# 验证结果
print(df.head())

方案2:固定宽度分割(更精准)

如果数据列的宽度固定,用read_fwf可以完全避免分割错误:

import pandas as pd

file_path = "test_data.txt"
chunk_size = 1000000
column_names = ["col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9"]
# 根据示例行定义每列的字符宽度,最后一列设为None捕获剩余所有内容
col_widths = [5, 8, 6, 12, 6, 4, 4, 10, None]

df_list = []

for chunk in pd.read_fwf(
    file_path,
    chunksize=chunk_size,
    widths=col_widths,
    header=None,
    names=column_names
):
    df_list.append(chunk)

df = pd.concat(df_list)
# 验证结果
print(df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:25:00