如何拆分DataFrame中列表列并保留其余列数据?
解决DataFrame拆分列表列并保留其他列的问题
你碰到的问题很常见——直接对单列用apply(pd.Series)确实只会返回拆分后的列,自然就丢了A、B列。其实只需要把拆分后的结果和原DataFrame的其他列合并就可以了,下面给你两种简单的实现方式:
方法一:用pd.concat合并列
先拆分C列得到新的列,再和原数据的A、B列横向拼接:
import pandas as pd # 你的示例数据 df = pd.DataFrame({ 'A': [1, 2], 'B': ['Row1', 'Row2'], 'C': [['rowa','rowb','rowc'], ['rowd','rowg','rowf']] }) # 拆分C列为多列 split_c = df['C'].apply(pd.Series) # 给拆分后的列重命名(可选,但更清晰) split_c.columns = [f'C_{col}' for col in split_c.columns] # 合并原DataFrame的A、B列和拆分后的列 result_df = pd.concat([df[['A', 'B']], split_c], axis=1) print(result_df)
输出结果:
A B C_0 C_1 C_2 0 1 Row1 rowa rowb rowc 1 2 Row2 rowd rowg rowf
方法二:用join一步完成
join方法可以直接把拆分后的列附加到原DataFrame上,写法更简洁:
result_df = df.join(df['C'].apply(pd.Series).rename(columns=lambda x: f'C_{x}'))
这个方法和上面的结果完全一致,省去了单独合并的步骤。
关键说明
- 为什么原来的代码会丢列?因为
df['C'].apply(pd.Series)只针对C列操作,返回的是仅包含拆分后列的新DataFrame,没有关联原数据的其他列。 - 如果你的列表长度不一致,拆分后会自动用
NaN填充缺失的位置,这点需要注意。
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

