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

如何用Pandas将单列键值对转换为结构化DataFrame?

Pandas将键值对单列DataFrame转换为结构化表格

问题场景

现有仅包含KEY_VAL列的Pandas DataFrame,数据以固定的「键-值」对重复出现,每组包含Date、Location、Description、Voyage四个键及其对应值,行数随新增数据动态变化。

输入数据示例

import pandas as pd

lis = ['Date',
  '01/07/2022',
  'Location',
  'Paris',
  'Description',
  'Empty',
  'Voyage',
  'EMPTY',
  'Date',
  '28/06/2022',
  'Location',
  'Lyon',
  'Description',
  'Import',
  'Voyage',
  'LADEN',
  'Date',
  '24/06/2022',
  'Location',
  'Marseille',
  'Description',
  'PORT',
  'Voyage',
  'BARGE']
df = pd.DataFrame(lis, columns=['KEY_VAL'])

原始DataFrame输出

KEY_VAL
0   Date
1   01/07/2022
2   Location
3   Paris
4   Description
5   Empty
6   Voyage
7   EMPTY
8   Date
9   28/06/2022
10  Location
11  Lyon
12  Description
13  Import
14  Voyage
15  LADEN
16  Date
17  24/06/2022
18  Location
19  Marseille
20  Description
21  PORT
22  Voyage
23  BARGE

目标结构化DataFrame

dic = {'Date' : ['01/07/2022', '28/06/2022', '24/06/2022'], 
       'Location' : ['Paris', 'Lyon', 'Marseille'],
       'Description' : ['Empty', 'Import', 'PORT'],
       'Voyage' : ['EMPTY', 'LADEN', 'BARGE']
      }
df2 = pd.DataFrame(dic)

输出效果:

Date  Location Description Voyage
0  01/07/2022     Paris        Empty   EMPTY
1  28/06/2022      Lyon       Import   LADEN
2  24/06/2022  Marseille         PORT   BARGE

解决方案

方法一:简洁数组重塑法

利用数据的固定分组规律,直接将一维数据转为二维数组后提取对应内容:

# 将单列数据转为每行8个元素的二维数组(每组4个键+4个值)
data = df['KEY_VAL'].values.reshape(-1, 8)
# 提取每组的对应值作为行,第一组的键作为列名
result = pd.DataFrame(data[:, 1::2], columns=data[0, ::2])
  • reshape(-1, 8):自动计算分组数,将一维数组拆分为每行8个元素的二维结构
  • data[:, 1::2]:提取所有组的值(每组的第2、4、6、8个元素)
  • data[0, ::2]:提取第一组的键名作为新DataFrame的列名

方法二:分组透视法

适合需要更清晰步骤理解的场景:

# 1. 给每组数据添加分组ID(每8行一组)
df['group_id'] = df.index // 8

# 2. 拆分键和值行
keys = df[df.index % 2 == 0].rename(columns={'KEY_VAL': 'key'}).reset_index(drop=True)
values = df[df.index % 2 == 1].rename(columns={'KEY_VAL': 'value'}).reset_index(drop=True)

# 3. 合并后透视成结构化表格
merged = pd.concat([keys, values], axis=1)
result = merged.pivot(index='group_id', columns='key', values='value').reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:54:16