将 pandas df 中的句子拆分为多行单词并对每个句子进行编号

Posted

技术标签:

【中文标题】将 pandas df 中的句子拆分为多行单词并对每个句子进行编号【英文标题】:split sentences in pandas df into rows of words and number each sentence 【发布时间】:2020-08-26 15:02:28 【问题描述】:

我是 python 新手,我有一个如下所示的 pandas 数据框:

df =
sn  sent                                                    ent
0   ['an', 'apple', 'is', 'an', 'example', 'of', 'what?']   ['O', 'F', '0', '0', '0', 'O', 'O']
1   ['a', 'potato', 'is', 'an', 'example', 'of', 'what?']   ['O', 'V', '0', '0', '0', 'O', 'O']

我想创建另一个如下所示的 pandas 数据框:

newdf= 
sn  sent        ent
0   an          O
    apple       F
    is          O
    an          O
    example     O
    of          O
    what?       O
1   a           O
    potato      V
    is          O
    an          O
    example     O
    of          O
    what?       O

我尝试了这段代码,最终得到了代码下方显示的内容

df.set_index('sn')
            .stack()
            .str.split(expand=True)
            .stack()
            .unstack(level=1)
            .reset_index(level=0, drop=0)

这很接近我想要的,但似乎可以弄清楚其余的

sn  sent        ent
0   ['an',      ['O',
0   'apple',    'F',
0   'is',       'O',
0   'an',       'O',
0   'example',  'O',
0   'of',       'O',
0   'what?',    'O',
1   'a',        'O',
1   'potato',   'V',
1   'is',       'O',
1   'an',       'O',
1   'example',  'O',
1   'of',       'O',
1   'what?']    'O']

非常感谢任何指针

【问题讨论】:

尝试用explode和concat结果~ 你也可以试试explode+join df.join([df[i].explode() for i in ['sent','ent']]) 【参考方案1】:
df = pd.DataFrame('sn': [0,1],
                  'sent': [['an', 'apple', 'is', 'an', 'example', 'of', 'what?'], ['a', 'potato', 'is', 'an', 'example', 'of', 'what?']],
                  'ent': [['O', 'F', '0', '0', '0', 'O', 'O'], ['O', 'V', '0', '0', '0', 'O', 'O']])

df.apply(pd.Series.explode).set_index('sn')

结果:

       sent ent
sn             
0        an   O
0     apple   F
0        is   0
0        an   0
0   example   0
0        of   O
0     what?   O
1         a   O
1    potato   V
1        is   0
1        an   0
1   example   0
1        of   O
1     what?   O

【讨论】:

以上是关于将 pandas df 中的句子拆分为多行单词并对每个句子进行编号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pandas 句子列中使用自动更正

根据每个句子的第一个单词将 pandas 数据框列中的字符串列表分解为新列

Pandas: 如何将一列中的文本拆分为多行? | Python

将一串空格分隔的单词拆分为多行[重复]

如何在 BigQuery SQL 中将字符串列拆分为多行单个单词和单词对?

Pandas 数据框:如何按多值列将一行拆分为多行? [复制]