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

pandas如何拆分每行key=value数据生成带规范表头的DataFrame

问题原因

你之前的代码运行失败核心有两点:

  • .str是pandas单列Series的方法,直接对多列DataFrame调用会触发属性错误
  • 现有DataFrame已经按空格完成了列拆分,只是存在首行数据被误识别为表头、单元格存储key=value格式内容、最后一列存在冗余列名和引号包裹的值三个问题,不需要再对整行做空格拆分。
可行实现方案

完整处理代码

import pandas as pd
import numpy as np

# 1. 恢复被误当成列名的首行数据(如果读文件时指定header=None可跳过此步)
first_row = pd.DataFrame([df.columns.to_list()], columns=df.columns)
df = pd.concat([first_row, df], ignore_index=True)

# 2. 处理前4列固定键值对,提取等号后的值
for col in df.columns[:4]:
    df[col] = df[col].str.split('=', expand=True)[1]

# 3. 处理最后一列的pre字段,自动过滤空值、去掉包裹值的双引号
last_col = df.columns[-1]
df['pre'] = df[last_col].apply(
    lambda x: x.split('=')[1].strip('"') if isinstance(x, str) and 'pre=' in x else np.nan
)

# 4. 整理列名和字段顺序,删除冗余列
desired_df = df[df.columns[:4].to_list() + ['pre']]
desired_df.columns = ['age', 'gender', 'loc', 'key', 'pre']

# 可选:将age字段转为整数类型
desired_df['age'] = desired_df['age'].astype(int)

从读文件阶段规避问题的优化写法

如果你还没开始读原始数据,直接在读取时指定无表头、按多空格分隔,可以省去恢复首行的步骤:

# 替换成你的实际文件路径
df = pd.read_csv('your_data_file', sep=r'\s+', header=None)
# 后续直接执行上面步骤2-4的逻辑即可
处理效果

执行后输出的desired_df会完全匹配你需要的格式:

  • age、gender、loc、key、pre为规范列名
  • 所有值去掉了键=前缀,pre列去掉了包裹的双引号
  • 无pre值的行自动填充NaN
  • 冗余的Unnamed列被完全移除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:04:23