如何通过Pandas将DataFrame单列以\分隔的特征拆分至多列?
Pandas实现DataFrame单列按分隔符拆分到多列
问题场景
你有一个如下结构的DataFrame:
| A\B\C\D | Unnamed:1 | Unnamed:2 | Unnamed:3 | Unnamed:4 |
|---|---|---|---|---|
| 1\2\3\4 | NaN | NaN | NaN | NaN |
| 1\2\3\4 | NaN | NaN | NaN | NaN |
| a\2\7\C | NaN | NaN | NaN | NaN |
| d\2\u\4 | NaN | NaN | NaN | NaN |
需要将第一列中用\分隔的内容拆分到独立的A、B、C、D列,同时移除无用的NaN列,得到目标结构:
| A | B | C | D |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 1 | 2 | 3 | 4 |
| a | 2 | 7 | C |
| d | 2 | u | 4 |
解决方案
直接使用Pandas的str.split()方法即可完成拆分,结合列名拆分设置新列名,步骤如下:
- 构造示例数据(用于复现场景,可跳过)
import pandas as pd import numpy as np df = pd.DataFrame({ 'A\\B\\C\\D': ['1\\2\\3\\4', '1\\2\\3\\4', 'a\\2\\7\\C', 'd\\2\\u\\4'], 'Unnamed:1': [np.nan]*4, 'Unnamed:2': [np.nan]*4, 'Unnamed:3': [np.nan]*4, 'Unnamed:4': [np.nan]*4 })
- 拆分目标列并设置新列名
# 拆分第一列,expand=True将拆分结果转为多列 split_result = df['A\\B\\C\\D'].str.split('\\', expand=True) # 从原列名中提取新列名 new_col_names = df.columns[0].split('\\') # 给拆分后的列设置名称 split_result.columns = new_col_names # 查看最终结果 print(split_result)
补充说明
- 如果原始DataFrame中还有其他需要保留的有效列,可以用
pd.concat合并结果:# 假设需要保留名为'Useful_Column'的列 final_df = pd.concat([split_result, df['Useful_Column']], axis=1) - 注意
\是转义字符,在Python字符串中需要用\\表示,或者使用原始字符串r'\'。
内容的提问来源于stack exchange,提问作者AdrixnIPP
相关产品推荐
相关产品推荐

