pandas dataframe新增列时从trainingInput提取serviceAccount值异常求助
问题原因
- 循环赋值逻辑错误:你在遍历每行
trainingInput的循环体内,每次都对整个df['serviceaccount']列赋值,导致整列最终只会保留最后一次循环得到的serviceAccount值,看起来就像随机结果 - 异常处理位置错误:
try-except放在循环内部,且触发KeyError时直接给整列赋值为None,没有处理单条数据缺失字段的场景 - 冗余操作:如果
trainingInput列本身就是Python字典类型,不需要做json.dumps再json.loads的多余转换 - 注释的merge写法维度不匹配:你把二维的
df5.values重复多倍构造新DataFrame,维度和原df对不上,直接触发维度错误
解决方法
直接用pandas的str.get方法即可一行实现需求,还能自动处理不存在key的场景,默认返回NaN,你也可以自定义填充值:
# 直接提取,不存在key的行返回NaN df['serviceAccount'] = df['trainingInput'].str.get('serviceAccount') # 如果要把缺失值替换为'None',用下面的写法 df['serviceAccount'] = df['trainingInput'].str.get('serviceAccount').fillna('None')
如果你需要同时提取多个字段(比如你注释里的region),可以用apply结合字典推导:
def extract_train_info(x): return pd.Series({ 'serviceAccount': x.get('serviceAccount', 'None'), 'region': x.get('region', 'None') }) df[['serviceAccount', 'region']] = df['trainingInput'].apply(extract_train_info)
内容的提问来源于stack exchange,提问作者Maa
相关产品推荐
相关产品推荐

