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

基于Pandas实现CSV数据校验:聚类结果转特征数组代码纠错求助

修正后的代码实现(满足聚类结果转二进制数组并取逻辑或需求)

先梳理下你原代码里的几个核心问题:

  • 循环中直接修改了原始聚类DataFrame,导致后续单词查询时数据被过滤为空
  • 列名拼写混乱(一会儿centroid一会儿centroid;),直接引发取值错误
  • 用is判断数值相等是错误用法,且没有正确提取聚类中心的具体值
  • 完全没实现多词数组取逻辑或的核心需求,反而错误地拼接了数组
  • 所有句子的结果堆在一个数组里,没有按句子区分处理

下面是贴合你需求的修正代码:

import pandas as pd
import re

# 1. 读取两个CSV文件
cluster_df = pd.read_csv('data/hasil_cluster.csv', encoding="ISO-8859-1")
sentence_df = pd.read_csv('data/data_komentar.csv', encoding="ISO-8859-1")

# 2. 处理聚类数据:统一列名+转成字典提升查询效率
cluster_df.columns = cluster_df.columns.str.strip().str.replace(';', '')
word_centroid_map = {row['word'].lower(): row['centroid'] for _, row in cluster_df.iterrows()}

# 3. 定义工具函数:把centroid转成长度为5的二进制数组
def centroid_to_binary(centroid):
    binary_arr = [0] * 5
    if 0 <= centroid <= 4:
        binary_arr[centroid] = 1
    return binary_arr

# 4. 逐句处理,生成逻辑或后的二进制数组
sentence_results = []
for _, row in sentence_df.iterrows():
    raw_sentence = str(row['sentences'])
    # 文本清洗:移除特殊字符、数字
    cleaned_sentence = re.sub(r'([^\s\w]|_)', '', raw_sentence)
    cleaned_sentence = re.sub(r'[0-9]+', '', cleaned_sentence)
    words = cleaned_sentence.lower().split()
    
    # 初始化当前句子的结果数组为全0
    current_result = [0] * 5
    for word in words:
        if word in word_centroid_map:
            centroid = word_centroid_map[word]
            word_binary = centroid_to_binary(centroid)
            # 逐位逻辑或:只要有一个词对应位置为1,结果就为1
            current_result = [a | b for a, b in zip(current_result, word_binary)]
    
    sentence_results.append(current_result)
    # 可选:打印单句结果用于验证
    print(f"原句: {raw_sentence} → 结果数组: {current_result}")

# 输出所有句子的最终处理结果
print("\n所有句子处理完成,结果列表:")
print(sentence_results)

关键改动说明:

  • 字典查询替代DataFrame过滤:把聚类数据转成单词:聚类中心的字典,既避免修改原始数据,又大幅提升查询速度
  • 列名自动修正:处理原文件中可能存在的列名带分号/空格的问题,避免拼写错误
  • 正确实现逻辑或:通过zip+逐位或运算,完美实现多词数组的合并需求
  • 按句子独立处理:每个句子初始化全0数组,遍历单词后合并结果,最终按句子收集所有结果
  • 大小写统一:所有单词转小写,确保匹配的准确性

拿你给出的测试数据举例:

  • good对应centroid=3,二进制数组是[0,0,0,1,0];mother对应centroid=2,二进制数组是[0,0,1,0,0]
  • 句子good mother处理后,逻辑或结果为[0,0,1,1,0],完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:31