python - pandas对json值进行分列处理

昨天又碰到一个难题,对于DataFrame中某一列值都是json格式的数据如何通过pandas进行分割转化。
下面给出造句的思路。其实想明白之后也就很简单了。
主要是用到列表的有序性,但前提要保证原DF中的值都是非空值。

sst = 'c:2,d:2,aa:0'
ssa = 'c:1,d:-1,aa:2'
lst = [sst,ssa]
data = pd.DataFrame({'a':lst})
# 制造数据

[ 's'+str(i) for i in range(101,103,)]
data['index'] = [ 's'+str(i) for i in range(100,102)]
# 增加一列值,也是用于数据检验,因元数据中一定还存在其他列,如果只有一列json数据也就不用这样麻烦了

def split_column(data,col):
    '''
    DF中的值存在字典map格式数据,需要分拆成列进行展示的时候。直接使用df.col.str.split('xx',expand=True)就行不通了,这样得出的结果还是单个
    的map值。
    因此 通过对列值先转换成列表,然后对列表元素进行分拆,组合成列表字典格式,最好再转换成df格式。因列表的有序性。
    最后可以直接通过merge方法,通过相同索引合并原DF和列表字典转换后的DF就能实现了
    '''
    tent = col.values.tolist()  #转成列表
    tents = []  #定义空列表,用于接收DF中col分割后的字典
    for i in tent:
        dic = {}
        for j in i.split(','):  #这里分割,以目标值中的分割符为准
            dic[j.split(':')[0]] = j.split(':')[1]
        tents.append(dic)  #完成接收
    
    df = pd.DataFrame(tents)  #列表字典转换成DF格式
    for i in df.columns.tolist():  #针对字典的值为数字的,进行数值转换。如果值不为数字的,或者无需求的请pass掉 这个for循环
        df[i] = df[i].astype('int')
    data_new = pd.merge(data,df,left_index=True,right_index=True)  #将原DF和处理后的DF索引合并
    return data_new

    
df_new = split_column(data,data['a'])
#函数调用

分拆处理结果如下图:
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值