You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pandas DataFrame中的NaN值创建句子编号列

问题

我有一个Pandas DataFrame,其中“Word”列每行存储一个单词,句子之间以空串(对应空行)分隔,因此设置skip_blank_lines=False来保留分隔情况。读取数据的代码如下:

df = pd.read_csv("Data-June-2023.txt", sep=" ", skip_blank_lines=False)
df.tail(20)

数据示例:

Index   Word    _   _   Tag
0   I   _   _   O
1   am  _   _   O
2   from    _   _   O
3   Madrid  _   _   B-City
4   NaN   NaN  NaN  NaN
5   Alice   _   _   B-Person
6   likes   _   _   O
7   Bob _   _   B-Person

需求:创建名为“Sentence #”的新列,每遇到“Word”列的NaN值时,为后续新句子分配递增编号(如Sentence: 1、Sentence: 2等),仅在每个句子的首行显示编号,其余行留空。期望输出格式如下:

Index   Sentence #  Word    _   _   Tag
0   Sentence: 1 I   _   _   O
1               am  _   _   O
2               from    _   _   O
3               Oxford  _   _   B-City
4               NaN NaN NaN NaN
5   Sentence: 2 Alice   _   _   B-Person
6               likes   _   _   O
7               Bob _   _   B-Person
8               NaN NaN NaN NaN
9   Sentence: 3 Alice   _   _   B-Person
解决方案

通过以下步骤可实现需求:

实现代码

import pandas as pd

# 读取数据(保留空行)
df = pd.read_csv("Data-June-2023.txt", sep=" ", skip_blank_lines=False)

# 1. 标记句子分隔行:Word列为NaN时标记为1,其余为0
df['separator_flag'] = df['Word'].isna().astype(int)

# 2. 生成句子编号:累积分隔标记数+1,得到当前行所属的句子编号
df['sentence_id'] = df['separator_flag'].cumsum() + 1

# 3. 创建并填充Sentence #列
df['Sentence #'] = ''
# 识别每个句子的首行:第一行 或 分隔行的下一行
sentence_starts = (df['separator_flag'].shift(1, fill_value=1) == 1) & (df['separator_flag'] == 0)
# 为首行填充编号
df.loc[sentence_starts, 'Sentence #'] = 'Sentence: ' + df.loc[sentence_starts, 'sentence_id'].astype(str)

# 移除辅助列(可选)
df = df.drop(columns=['separator_flag', 'sentence_id'])

# 查看结果
print(df)

代码说明

  • df['Word'].isna().astype(int):将空行(Word为NaN)标记为1,用于识别句子分隔点。
  • df['separator_flag'].cumsum():对分隔点进行累积计数,每遇到一个空行,计数加1,后续行自动归属到下一个句子。
  • sentence_starts逻辑:通过shift(1)把分隔标记向上移动一行,第一行默认视为分隔点之后的行,确保第一个句子首行被标记;同时筛选非分隔行,避免给空行填充编号。
  • 最后仅给句子首行填充Sentence: X格式的编号,其余行保持空字符串。

运行后即可得到符合要求的DataFrame结构。

内容的提问来源于stack exchange,提问作者R0manTic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:07:15