如何在pandas中展开列内类字典取值并生成独立新列
实现方法
你可以通过两种常用的pandas操作实现需求,两种方法都包含空值、空字符串过滤逻辑,保证最终生成的data_usage和device_name列无无效值:
方法1:使用pd.json_normalize(推荐,性能更优,适合字典键多的场景)
该方法会自动解析list列的所有字典键,你可以按需保留需要的字段:
import pandas as pd # 解析list列的字典为独立DataFrame expanded = pd.json_normalize(df['list']) # 拼接原表非list列 + 所需两个新列,删除原list列 df_result = pd.concat( [df.drop(columns=['list']), expanded[['data_usage', 'device_name']]], axis=1 ) # 过滤存在空值、空字符串的行 df_result = df_result.dropna(subset=['data_usage', 'device_name']) df_result = df_result[(df_result['data_usage'] != '') & (df_result['device_name'] != '')]
方法2:使用.str.get(写法更简洁,适合仅需取少量键的场景)
直接从字典列按键取值生成新列,无需解析全部字段:
import pandas as pd # 直接提取指定键的值生成新列 df['data_usage'] = df['list'].str.get('data_usage') df['device_name'] = df['list'].str.get('device_name') # 删除原list列 df_result = df.drop(columns=['list']) # 过滤存在空值、空字符串的行 df_result = df_result.dropna(subset=['data_usage', 'device_name']) df_result = df_result[(df_result['data_usage'] != '') & (df_result['device_name'] != '')]
处理后最终的DataFrame将包含id、date、data_usage、device_name四列,符合要求。
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

