如何用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
相关产品推荐
相关产品推荐

