如何替换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
相关产品推荐
相关产品推荐

