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

如何将DataFrame首列值转为新列?解决透视KeyError:0报错问题

问题修复与优化方案

一、修复pivot的KeyError问题

你的脚本报错是因为没有给每行数据分配唯一的分组标识,直接用temp_df.index的话,每个key-value对都有独立索引,pivot无法将同一行的多个键值对聚合到同一行,导致索引匹配失败。

修复步骤如下:

  1. 拆分每行数据时,给每行添加一个row_id作为分组标识(比如行号);
  2. pivot时用row_id作为索引,确保同一行的键值对被正确聚合。

示例代码:

import pandas as pd
import re

# 示例数据(实际可从文件读取)
data = [
    "age=senior workclass=Self-emp-not-inc salary>50K",
    "age=middle workclass=Private salary<=50K"
]

rows = []
# 给每行分配唯一row_id
for row_idx, line in enumerate(data):
    pairs = line.split()
    for pair in pairs:
        # 处理两种格式的键值对:key=value 和 key>value/key<=value
        if '=' in pair:
            k, v = pair.split('=', 1)
        else:
            match = re.match(r'(\w+)([<>]=?)(\w+)', pair)
            if match:
                k = match.group(1)
                v = f"{match.group(2)}{match.group(3)}"
            else:
                k, v = pair, ''
        rows.append({'row_id': row_idx, 'column_names': k, 'column_values': v})

temp_df = pd.DataFrame(rows)
# 用row_id作为索引进行pivot
result_df = temp_df.pivot(index='row_id', columns='column_names', values='column_values').reset_index(drop=True)
# 保存为CSV
result_df.to_csv('output.csv', index=False)

二、更优的实现方法

其实不需要用pivot,直接将每行数据解析为字典,再批量生成DataFrame,代码更简洁高效,还能避免索引问题:

import pandas as pd
import re

def parse_single_line(line):
    """解析单行key-value格式数据为字典"""
    line_dict = {}
    for pair in line.split():
        if '=' in pair:
            key, value = pair.split('=', 1)
        else:
            # 匹配salary>50K这类带比较符的格式
            match = re.match(r'(\w+)([<>]=?)(\w+)', pair)
            if match:
                key = match.group(1)
                value = f"{match.group(2)}{match.group(3)}"
            else:
                key, value = pair, ''
        line_dict[key] = value
    return line_dict

# 从文件读取数据(替换为你的文件路径)
with open('input_data.txt', 'r', encoding='utf-8') as f:
    all_lines = f.read().splitlines()

# 批量解析并生成DataFrame
final_df = pd.DataFrame([parse_single_line(line) for line in all_lines])
# 输出CSV
final_df.to_csv('result.csv', index=False)

这种方式直接将每行转为字典,pandas会自动将所有键作为列名,缺失的列会填充NaN,处理逻辑更直观,性能也比pivot更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:55:16