Python Pandas如何提取单元格数据并转化为结构化多行多列
实现方案
使用pandas内置的矢量化操作即可高效完成转换,全程无需手动循环,处理大体积数据集时性能远高于遍历实现。
完整代码示例
import pandas as pd # 构造示例原始数据,实际使用时替换为你读取的数据集即可 df = pd.DataFrame({ 'ID': ['abc', 'def'], 'Value': ['(john:10),(albert:5),(hanna:7)', '(frank:5),(dave:8),(ben:11)'] }) # 1. 去除所有括号,按逗号拆分得到单个键值对组成的列表 df['Value'] = df['Value'].str.replace(r'[()]', '', regex=True).str.split(',') # 2. 炸开列表字段,每个键值对单独占一行 df = df.explode('Value', ignore_index=True) # 3. 按冒号拆分键值对为两列,并重命名 df[['Value1', 'Value2']] = df['Value'].str.split(':', expand=True) df = df.drop('Value', axis=1) # 可选:将Value2转为数值类型 df['Value2'] = pd.to_numeric(df['Value2']) print(df)
操作逻辑说明
- 第一步通过正则清洗冗余括号,把原本的长字符串转为键值对列表,全程为矢量化操作,不会触发逐行循环
- 第二步调用
explode方法直接展开列表行,一步完成行转列操作 - 第三步拆分键值对得到最终需要的两列,按需做类型转换即可
如果你的实际数据中键/值本身包含括号、逗号、冒号等特殊字符,调整第一步的正则和拆分规则适配即可。
内容的提问来源于stack exchange,提问作者Ilja
相关产品推荐
相关产品推荐

