Python中如何展平DataFrame中的列表类型列?
展平DataFrame中的多列表列
方法一:使用pandas的explode方法(推荐,pandas 1.3.0+)
直接对需要展平的多列执行explode操作,代码如下:
import pandas as pd df = pd.DataFrame({ 'col_1': ['abcd3', 'd4fs3'], 'col_2': ['vfce157', 'dfde28'], 'col_3': [['id_1','id_2'],['id_4','id_6','id_7']], 'col_4': [['p_1','p_2'],['p_3','p_5','p_0']], 'col_5': [['d_1','d_2'],['d_4','d_7','d_8']] }) # 同时展平多个列表列,重置索引避免重复 result_df = df.explode(['col_3', 'col_4', 'col_5'], ignore_index=True) print(result_df)
执行后输出结果与你期望的完全一致,ignore_index=True会重置结果的索引,保证索引连续不重复。
方法二:兼容旧版pandas(低于1.3.0)
如果你的pandas版本不支持多列explode,可以通过逐行拆分列表的方式实现:
import pandas as pd df = pd.DataFrame({ 'col_1': ['abcd3', 'd4fs3'], 'col_2': ['vfce157', 'dfde28'], 'col_3': [['id_1','id_2'],['id_4','id_6','id_7']], 'col_4': [['p_1','p_2'],['p_3','p_5','p_0']], 'col_5': [['d_1','d_2'],['d_4','d_7','d_8']] }) def process_row(row): # 重复非列表列的值,次数与列表长度匹配 fixed_cols = row[['col_1', 'col_2']].repeat(len(row['col_3'])).reset_index(drop=True) # 将列表列转为DataFrame list_cols = pd.DataFrame({ 'col_3': row['col_3'], 'col_4': row['col_4'], 'col_5': row['col_5'] }) # 合并固定列与拆分后的列表列 return pd.concat([fixed_cols, list_cols], axis=1) # 处理所有行并合并结果 result_df = pd.concat([process_row(row) for _, row in df.iterrows()], ignore_index=True) print(result_df)
该方法逐行处理数据,将每行的列表拆分为多行,同时重复对应行的非列表列值,最终合并得到目标结果。
内容的提问来源于stack exchange,提问作者kelopdevop
相关产品推荐
相关产品推荐

