You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Pandas中聚合列内连续非NaN单元格字符串并处理NLP特殊格式Excel?

解决不规则Excel文档的Pandas聚合方案

嘿,这种跨单元格的文档分组问题确实挺磨人的,嵌套循环不仅麻烦还容易出错,用Pandas的分组+聚合技巧就能轻松搞定,来看看具体步骤:

核心思路

利用空单元格作为文档分隔符,给每个连续的文档块分配唯一的分组ID,然后对每个分组做文本拼接和分数提取,完全不用写复杂的循环。

具体代码实现

假设你的DataFrame命名为df,文本列是text,分数列是score

import pandas as pd

# 1. 生成文档分组ID:遇到空文本行就递增分组号
df['group_id'] = df['text'].isna().cumsum()

# 2. 过滤掉无内容的空行(比如文档间的多个空单元格)
df = df[(df['text'].notna()) | (df['score'].notna())]

# 3. 分组聚合:拼接文本+提取有效分数
result_df = df.groupby('group_id').agg(
    # 拼接分组内所有非空的文本单元格
    full_document=('text', lambda x: ' '.join(x.dropna().astype(str))),
    # 提取分组内唯一的有效分数(不管在首行还是末行)
    document_score=('score', lambda x: x.dropna().iloc[0])
).reset_index(drop=True)

代码解释

  • 分组ID生成df['text'].isna().cumsum()会在每遇到一个空文本行时,让group_id加1,这样每个连续的非空文本块(同一个文档)会被分到同一个组里,哪怕文档间有多个空单元格也不影响。
  • 过滤空行:把那些既没有文本也没有分数的纯空行去掉,避免生成无效分组。
  • 聚合操作
    • 文本拼接:用join把分组内所有非空的文本单元格连起来,astype(str)是防止单元格里有非字符串类型的数据报错。
    • 分数提取:因为每个文档只有一个有效分数(不管在首行还是末行),所以先去掉空值,再取第一个值即可。

适配特殊情况

如果你的分数列空值不是NaN而是空字符串,可以把分数提取的lambda改成:

document_score=('score', lambda x: x[x != ''].iloc[0])

这样处理后,result_df里每一行就是一个完整的文档对应的文本和分数啦!

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

火山引擎 最新活动