如何将DataFrame中存储字典列表的列拆分至多列?
解决方法:展开DataFrame中包含单个字典的列表列
嘿,你已经完成了最关键的一步——把字符串格式的列表转成了可操作的Python对象,接下来的处理其实很简单,咱们一步步拆解:
1. 先验证单一行的处理逻辑
你已经通过ast.literal_eval把第一行的line_items转成了包含单个字典的列表,接下来只要取出这个字典,转成Pandas Series就能得到对应列名和值的结构:
import pandas as pd # 你已经得到的列表对象 li_column = [{'id': 4099, 'name': 'xxxxxxxx + 30 filter', 'product_id': 6546, ...}] # 取出列表里唯一的字典 single_item_dict = li_column[0] # 转成Series,字典的键会自动成为索引(也就是后续的列名) item_series = pd.Series(single_item_dict) print(item_series)
输出会是类似这样的结构:
id 4099 name xxxxxxxx + 30 filter product_id 6546 ... dtype: object
2. 批量处理整个1500行的DataFrame
把上面的逻辑用apply推广到整个列,再合并回原DataFrame即可:
import pandas as pd import ast # 假设你的原始DataFrame是my_df # 第一步:把所有line_items的字符串转成Python列表 my_df['line_items'] = my_df['line_items'].apply(ast.literal_eval) # 第二步:提取每个列表里的字典,转成新的DataFrame expanded_line_items = my_df['line_items'].apply(lambda x: pd.Series(x[0])) # 第三步:把展开后的列和原DataFrame合并(记得去掉原来的line_items列) final_df = pd.concat([my_df.drop('line_items', axis=1), expanded_line_items], axis=1) # 查看前几行结果 final_df.head()
执行后你就会得到包含id、name、product_id等新列的DataFrame,每行对应的值就是原字典里的内容。
额外处理:嵌套的meta_data列(可选)
如果还想把meta_data里的嵌套字典也展开成单独的列(比如把pa_size、_reduced_stock转成独立列),可以再加一段处理逻辑:
def extract_meta(meta_list): # 把meta_data里的字典转成键值对字典 meta_dict = {item['key']: item['value'] for item in meta_list} return pd.Series(meta_dict) # 展开meta_data列 expanded_meta = final_df['meta_data'].apply(extract_meta) # 合并到最终DataFrame(去掉原来的meta_data列) final_df = pd.concat([final_df.drop('meta_data', axis=1), expanded_meta], axis=1)
处理后你就会看到pa_size、_reduced_stock这样的新列,对应的值就是原嵌套字典里的L、1等内容。
内容的提问来源于stack exchange,提问作者Caio Gadanha
相关产品推荐
相关产品推荐

