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

如何替换Pandas DataFrame中来自JSON的特殊字典值?

问题原因与解决方案

为什么替换语句无效?

你用字符串'{"specialValue": "Infinity"}'去匹配,但DataFrame的roi、investment_return列中存储的是Python字典对象,不是字符串,所以字符串匹配无法命中目标值,替换自然不生效。

可行替换方法

方法一:生成DataFrame时提前处理(推荐,更高效)

修改数据解析逻辑,在构建DataFrame前就把特殊字典替换成目标值:

import json
import pandas as pd
import numpy as np

def read_json():
    with open('json_test.json', 'r') as file:
        data = json.load(file)
        
    processed_data = []
    for record in data:
        # 整合id和fields数据
        item = {'id': record['id'], **record['fields']}
        
        # 替换roi字段的Infinity字典
        if isinstance(item.get('roi'), dict) and item['roi'].get('specialValue') == 'Infinity':
            item['roi'] = np.nan  # 需替换为0则改成0
        
        # 替换investment_return字段的NaN字典
        if isinstance(item.get('investment_return'), dict) and item['investment_return'].get('specialValue') == 'NaN':
            item['investment_return'] = np.nan  # 需替换为0则改成0
            
        processed_data.append(item)
    
    df = pd.DataFrame(processed_data)
    return df

方法二:生成DataFrame后逐列处理

如果已经得到了未处理的DataFrame,对目标列使用apply做逐行判断替换:

import numpy as np

# 处理roi列
df['roi'] = df['roi'].apply(
    lambda x: np.nan if isinstance(x, dict) and x.get('specialValue') == 'Infinity' else x
)

# 处理investment_return列
df['investment_return'] = df['investment_return'].apply(
    lambda x: np.nan if isinstance(x, dict) and x.get('specialValue') == 'NaN' else x
)

# 若要替换为0,将上述代码中的np.nan替换为0即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:45:03