如何在 pandas 中将符号后的文本分成行

问题描述 投票:0回答:2

我试图将每个符号的文本与一个长文本分开。

第 1 栏
C9 禁用珍珠; LEV 禁止骨折; C9 挑莲花; LEV选择避风港; C9 禁止拆分; LEV 禁止上升;绑定遗迹

我需要将这个长文本转换成这个表格

团队 pb_phase 地图
C9 珍珠
LEV 骨折
C9 挑选 荷花
LEV 挑选 避风港
C9 分裂
LEV 上升

我希望将每个符号划分到每一行,然后将每一行的文本划分到 3 个不同的列(team、pb_phase 和 map)

python pandas apply melt
2个回答
1
投票

另一种可能的解决方案:

(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

0
投票

使用

Series.str.split
DataFrame.explode
,agins
split
并通过
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
© www.soinside.com 2019 - 2024. All rights reserved.