python -- 批量解析dataframe中的json串并形成新的字段

最近遇到了类似这样的问题:批量解析数据库中某张表的某一列(json串形式存储),效果如下。

原始数据库中的数据 图1 原始数据库中的数据

 

图2 处理后的数据形式

为此,我编写了如下的python脚本

def main(table_source,var_name):
    """
    【批量解析json串】
    入参:
        table_source:含义:来自数据库的库名.表名,
                      格式:字符串,
                      例如:'bestbuy_decision.streaming_target_info'
        var_name:含义:需要解析的字段
                  格式:字符串
                  例如:'data'
    
    使用范例:
        data = main(table_source,var_name)
    """
    sql_command = "SELECT * FROM  "+ str(table_source)
    data_list = connect_mysql(str(sql_command),command_type='select')                    #从TiDB取数
    data = pd.DataFrame(data_list)                                                       #将取到的数转为DataFrame格式
    data['columns'] = data[str(var_name)].map(lambda x:list(json.loads(x).keys()))       #新增一列'columns'用于存储每一列的json串的字段名
    add_columns_list =list(set( list(chain(*data['columns'] ))))                         #获取json串中的所有字段名称
    for columns in add_columns_list:
        data[str(columns)] = data['data'].map(lambda x:json.loads(x).get(str(columns)))  #将json串展开
    del data['columns']                                                                  #删除无用字段columns
    return data                                                                          #返回处理过后的数据    

使用上述函数可以实现从图1到图2的效果。

我自己测试,100+w行的数据(字段数40左右)大概需要10分钟。

 

 

你可能感兴趣的:(python,python菜菜鸟)