我在数据框中有一列,其中包含大约1,4M行的聊天对话,每个单元格中的常规格式为(1):

“名称代理:对话”

但是,并非列中的所有单元格都采用这种格式。一些单元格很简单(2):

'会话'

我使用以下代码仅获取结构如(1)的单元格的对话:

only_transcripts['msgText'] = only_transcripts['msgText'].str.partition(':', expand = True)[2]


但是,很明显,如果单元格中不包含冒号(:),则此代码不会返回任何内容。

有没有一种快速的方法可以避免for循环遍历每个实例,而仅将上述代码应用于包含冒号的单元格中?

最佳答案

在原始列中添加Series.fillna以替换NaN,这也是使用split并通过索引查找第二个列表的另一种解决方案

only_transcripts['msgText'] =(only_transcripts['msgText'].str.split(':')
                                                         .str[1]
                                                         .fillna(only_transcripts['msgText']))

10-07 21:53