python -- 批量解析dataframe中的json串並形成新的欄位
阿新 • • 發佈:2019-02-14
最近遇到了類似這樣的問題:批量解析資料庫中某張表的某一列(json串形式儲存),效果如下。
為此,我編寫了如下的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分鐘。