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

