我试图将每个符号的文本与一个长文本分开。
第 1 栏 |
---|
C9 禁用珍珠; LEV 禁止骨折; C9 挑莲花; LEV选择避风港; C9 禁止拆分; LEV 禁止上升;绑定遗迹 |
我需要将这个长文本转换成这个表格
团队 | pb_phase | 地图 |
---|---|---|
C9 | 班 | 珍珠 |
LEV | 班 | 骨折 |
C9 | 挑选 | 荷花 |
LEV | 挑选 | 避风港 |
C9 | 班 | 分裂 |
LEV | 班 | 上升 |
我希望将每个符号划分到每一行,然后将每一行的文本划分到 3 个不同的列(team、pb_phase 和 map)
另一种可能的解决方案:
(pd.DataFrame(
df['Column 1'].str.split(';').explode().map(lambda x: x.split()).to_list(),
columns=['Team','pb_phase', 'Map']))
输出:
Team pb_phase Map
0 C9 ban Pearl
1 LEV ban Fracture
2 C9 pick Lotus
3 LEV pick Haven
4 C9 ban Split
5 LEV ban Ascent
6 Bind remains None
Series.str.split
与DataFrame.explode
,aginssplit
并通过DataFrame.set_axis
设置新列名称:
out = (df['Column 1'].str.split(';\s*')
.explode()
.str.split(expand=True)
.set_axis(['Team','pb_phase','Map'], axis=1)
.reset_index(drop=True))
或者为第一个
expand=True
添加split
并使用DataFrame.stack
:
out = (df['Column 1'].str.split(';\s*', expand=True)
.stack()
.str.split(expand=True)
.set_axis(['Team','pb_phase','Map'], axis=1)
.reset_index(drop=True))
或者对列表使用列表理解并传递给 Dataframe 构造函数:
out = pd.DataFrame([y.split() for x in df['Column 1'] for y in x.split('; ')],
columns=['Team','pb_phase','Map'])
print (out)
Team pb_phase Map
0 C9 ban Pearl
1 LEV ban Fracture
2 C9 pick Lotus
3 LEV pick Haven
4 C9 ban Split
5 LEV ban Ascent
6 Bind remains None