如何在pandas中将符号后文本划分为行

zvms9eto  于 2023-05-27  发布在  其他
关注(0)|答案(2)|浏览(112)

我试图从一个长文本中的每个符号中分割文本。
| 色谱柱1|
| - -----|
| C9班珍珠; LEV板断裂; C9采摘荷花;轻型电动车选择Haven; C9禁止拆分;轻型电动车禁止上升绑定残留|
我需要把这个长文本转换成这个表格
| 团队|铅相|Map|
| - -----|- -----|- -----|
| C9|班|珍珠|
| LEV|班|骨折|
| C9|镐|莲花|
| LEV|镐|港湾|
| C9|班|斯普利特|
| LEV|班|上升|
我希望将每个符号划分到每一行,然后将每行的文本划分到3个不同的列(team、pb_phase和map)

mwg9r5ms

mwg9r5ms1#

另一种可能的解决方案:

(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
ikfrs5lh

ikfrs5lh2#

Series.str.splitDataFrame.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))

或者为第一个split添加expand=True并使用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

相关问题