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

基于数组值动态拆分CSV列的技术需求

处理CSV中JSON格式标签列的动态列拆分

问题描述

现有如下格式的CSV数据:

IDtagexists
1[{"tag_uuid":"1a","tag_key":"tag1","tag_value":"value1 ","added_at":"2022-07-27T20:47:07.496Z"},{"tag_uuid":"1b","tag_key":"tag2","tag_value":"value2","added_at":"2022-07-27T20:47:07.480Z"}]TRUE
2[{"tag_uuid":"1a","tag_key":"tag1","tag_value":"value2","added_at":"2022-07-27T20:47:07.484Z"},{"tag_uuid":"1c","tag_key":"tag3","tag_value":"value1","added_at":"2022-07-27T20:47:07.409Z"}]TRUE
3[{"tag_uuid":"1c","tag_key":"tag3","tag_value":"value3","added_at":"2022-08-11T17:31:53.915Z"}]TRUE

需要将tag列中的tag_key动态拆分为独立列,并将对应的tag_value填充到对应行的位置;若列已存在则直接填充值,最终得到如下格式的表格:

IDexists?tag1tag2tag3
1TRUEvalue1value2
2TRUEvalue2value1
3TRUEvalue3

解决方案(Python实现)

用pandas结合json模块可以高效完成这个需求,步骤清晰且易扩展:

1. 安装依赖(若未安装)

pip install pandas

2. 实现代码

import pandas as pd
import json

# 读取原始CSV数据(替换为你的文件路径)
df = pd.read_csv('input.csv', sep='|', skipinitialspace=True)
# 清理列名的多余空格
df.columns = df.columns.str.strip()
# 移除分隔符导致的空列
df = df.dropna(axis=1, how='all')

# 解析tag列的JSON,收集所有tag_key和对应行的tag值
all_tag_keys = set()
tag_data_list = []

for tags_str in df['tag']:
    # 清理字符串前后空格,避免JSON解析报错
    clean_tags_str = tags_str.strip()
    tags = json.loads(clean_tags_str)
    row_tag_dict = {}
    for tag in tags:
        key = tag['tag_key']
        value = tag['tag_value'].strip()  # 清理值的多余空格
        row_tag_dict[key] = value
        all_tag_keys.add(key)
    tag_data_list.append(row_tag_dict)

# 将tag数据转为DataFrame,按字母顺序排列列
tags_df = pd.DataFrame(tag_data_list, columns=sorted(all_tag_keys))

# 合并原始ID、exists列与拆分后的tag列,重命名exists列为exists?
result_df = pd.concat([df[['ID', 'exists']].rename(columns={'exists': 'exists?'}), tags_df], axis=1)

# 将空值替换为空字符串(可选,按需调整)
result_df = result_df.fillna('')

# 打印结果到控制台
print(result_df.to_string(index=False))

# 保存结果到新CSV文件
result_df.to_csv('output.csv', index=False)

代码说明

  • 先处理原始CSV的格式问题:清理列名空格、移除空列,避免后续解析出错
  • 遍历每行的tag列,解析JSON字符串,提取tag_key和tag_value,同时收集所有唯一的tag_key作为新列名
  • 将提取的tag数据转为DataFrame,与原始的ID、exists列合并
  • 最后可选择输出到控制台或保存为新CSV文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:54:28