如何将Pandas DataFrame单列拆分为多列(元素数量不固定)
解决办法:拆分逗号分隔列并补全缺失值
嘿,这个需求很常见,我来给你写个清晰的解决方案!咱们用Pandas就能轻松搞定,步骤简洁易懂。
完整代码示例
假设你的DataFrame已经准备好,直接运行下面的代码即可:
import pandas as pd # 模拟你的原始DataFrame data = { 'ColumnA': ['usr', 'xyz', 'abc'], 'ColumnB': ['usr1,usr2', 'xyz1,xyz2,xyz3', 'abc1,abc2,abc3'], 'ColumnC': ['X1', 'X2', 'X3'] } df = pd.DataFrame(data) # 1. 拆分ColumnB列,每个拆分元素生成独立列 split_cols = df['ColumnB'].str.split(',', expand=True) # 2. 给拆分后的列统一命名为usercol1、usercol2... split_cols.columns = [f'usercol{i+1}' for i in split_cols.columns] # 3. 把空值替换成'-',处理元素数量不足的情况 split_cols = split_cols.fillna('-') # 4. 合并原数据与拆分列,调整成你要的列顺序 result_df = pd.concat([df, split_cols], axis=1) final_column_order = ['ColumnA', 'ColumnB'] + list(split_cols.columns) + ['ColumnC'] result_df = result_df[final_column_order] print(result_df)
运行结果
输出完全符合你的期望:
| ColumnA | ColumnB | usercol1 | usercol2 | usercol3 | ColumnC | |
|---|---|---|---|---|---|---|
| 0 | usr | usr1,usr2 | usr1 | usr2 | - | X1 |
| 1 | xyz | xyz1,xyz2,xyz3 | xyz1 | xyz2 | xyz3 | X2 |
| 2 | abc | abc1,abc2,abc3 | abc1 | abc2 | abc3 | X3 |
代码逻辑说明
str.split(',', expand=True):把ColumnB里的逗号分隔字符串拆成多列,哪怕有6个元素也会自动生成6个usercol列,完全适配元素数量不固定的场景。- 列重命名:用列表推导式给拆分后的列统一命名,避免默认的数字列名,更直观。
fillna('-'):把拆分后缺失的单元格(比如usr只有两个元素,第三个位置为空)替换成'-',完美补全缺省值。- 合并与列序调整:横向合并原数据和拆分列后,按照你指定的顺序重新排列列,确保输出结构和你要的一致。
内容的提问来源于stack exchange,提问作者user12989579
相关产品推荐
相关产品推荐

