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

如何用Pandas read_csv读取空格分隔数据:前5列拆分,剩余合并为单列

用Pandas高效处理空格分隔日志:拆分前5列并合并剩余内容

需求说明

现有一组空格分隔的日志数据,需转换为CSV格式:

  • 按空格拆分出前5列
  • 第5列之后的所有内容(包含可变数量的单词和空格)合并为单独一列

示例

输入(单条数据):

Lorem ipsum dolor sit amet, consectetur adipiscing elit

输出格式:

|Lorem|ipsum|dolor|sit|amet,|consectetur adipiscing elit|

日志数据实际格式示例:

ID Datetime Level Recovered Place Message
1  20230102 WARN  Yes       func1 Something wrong
2  20230103 ERROR No        func2 Something really bad

问题

此前采用逐行解析后存入DataFrame的方式,速度较慢,希望用read_csv这类Pandas高效方法实现。

解决方案

直接使用read_csv读取所有列,再通过矢量化操作合并第5列后的内容,比逐行解析效率高得多:

import pandas as pd

# 读取日志文件,sep匹配任意数量的空格,跳过表头行(如果日志有表头)
df = pd.read_csv(
    'your_log_file.txt',
    sep=r'\s+',          # 匹配一个或多个空格作为分隔符
    engine='python',     # Python引擎支持正则分隔符
    skiprows=1,          # 如果第一行是表头则跳过,无表头可删除此参数
    header=None          # 不将第一行作为表头
)

# 定义列名
column_names = ['ID', 'Datetime', 'Level', 'Recovered', 'Place', 'Message']

# 构建最终DataFrame:保留前5列,合并剩余列为Message
final_df = pd.DataFrame()
final_df[column_names[:5]] = df.iloc[:, :5]
final_df[column_names[-1]] = df.iloc[:, 5:].apply(' '.join, axis=1)

# 查看结果
print(final_df)

关键说明

  • sep=r'\s+':确保任意数量的空格都能作为分隔符,适配日志中列间空格不一致的情况
  • engine='python':必须使用Python引擎才能支持正则表达式作为分隔符
  • df.iloc[:,5:].apply(' '.join, axis=1):将每行第5列之后的所有元素用空格拼接,合并为单个字符串列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:14