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

如何扁平化Pandas DataFrame中含JSON格式的列?

解决方案:将Pandas DataFrame中的JSON数组列转为逗号分隔字符串

核心思路

json_normalize的作用是将JSON数组展开为多行记录,但你的需求是将数组内的tag值合并为单个逗号分隔的字符串列,因此需要改用apply结合字符串拼接的方式实现。

分场景实现

场景1:目标列是JSON格式字符串

如果tweet_hashtag和tweet_cashtag存储的是未解析的JSON字符串,先解析为Python列表,再提取tag并拼接:

import pandas as pd
import json

# 模拟你的原始DataFrame
df = pd.DataFrame({
    'created_at': ['2024-01-01', '2024-01-02'],
    'tweet_hashtag': [
        '[{"tag": "Python"}, {"tag": "DataScience"}]',
        '[{"tag": "Pandas"}, {"tag": "ML"}]'
    ],
    'tweet_cashtag': [
        '[{"tag": "AAPL"}, {"tag": "GOOGL"}]',
        '[]'
    ]
})

# 定义转换函数:解析JSON并拼接tag
def parse_and_join_tags(json_str):
    try:
        tag_list = json.loads(json_str)
        return ','.join(item['tag'] for item in tag_list)
    except (json.JSONDecodeError, KeyError):
        return ''  # 处理解析失败或空数组的情况

# 应用转换到目标列
df['tweet_hashtag'] = df['tweet_hashtag'].apply(parse_and_join_tags)
df['tweet_cashtag'] = df['tweet_cashtag'].apply(parse_and_join_tags)

# 查看最终结果
print(df)

场景2:目标列已解析为Python列表

如果列数据已经是Python列表格式(比如提前用json.loads批量解析过),直接提取tag拼接即可:

import pandas as pd

# 模拟已解析列表格式的DataFrame
df = pd.DataFrame({
    'created_at': ['2024-01-01', '2024-01-02'],
    'tweet_hashtag': [
        [{'tag': 'Python'}, {'tag': 'DataScience'}],
        [{'tag': 'Pandas'}, {'tag': 'ML'}]
    ],
    'tweet_cashtag': [
        [{'tag': 'AAPL'}, {'tag': 'GOOGL'}],
        []
    ]
})

# 直接拼接tag值
df['tweet_hashtag'] = df['tweet_hashtag'].apply(lambda x: ','.join(item['tag'] for item in x))
df['tweet_cashtag'] = df['tweet_cashtag'].apply(lambda x: ','.join(item['tag'] for item in x))

# 查看最终结果
print(df)

关键说明

json_normalize不适用的原因:它会把每个数组元素拆分为单独的行,而不是将元素合并到同一行的字符串中,与你的需求方向不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:25:21