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

CSV文件满足条件时如何定位行并实现独热编码?

解决CSV文件特征列的独热编码问题

你需要对CSV文件执行独热编码,规则如下:

  • label列:malware转为1,benign转为0;
  • md5列:保持原哈希值不变;
  • 第3列及之后的特征列:检查每个特征是否存在于feature-list.txt的特征列表中,匹配则转为1,不匹配则转为0。

你的CSV部分数据示例:

label,md5,create new key via CryptAcquireContext,delete user account group
malware,0e498d2283a99aad9a997200caf2f24e,packed with UPX,delete user account group
malware,1f0ffe101843e4135af712d899b0c0d3,inspect load icon resource,reference analysis tools strings

你已成功处理label列,但特征列的转换代码存在问题,无法正确匹配特征并转换为1。

问题分析

你现有代码中if (row[2::]) in headers:的逻辑错误:row[2::]是一个包含多个特征的列表,而headers是单个特征的列表,直接判断列表是否在列表中永远不会成立。需要逐个遍历每个特征项,检查是否存在于特征集合中。

解决方案

将特征列表转为集合(集合的成员查找效率远高于列表),然后遍历每行的特征列逐个替换:

import csv

# 读取特征列表并转为集合,提升查找效率
feature_set = set()
with open("feature-list.txt", 'r') as txt_file:
    for line in txt_file:
        feature = line.strip()
        if feature:  # 跳过空行
            feature_set.add(feature)

# 处理CSV文件并写入结果
with open('cleaned_features-test-2.csv', 'r') as infile, open('onehot.csv', 'w', newline='') as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    
    # 跳过原表头(若需要保留表头可删除此行并自行处理表头转换)
    next(reader)
    
    for row in reader:
        # 处理label列
        row[0] = '1' if row[0] == 'malware' else '0'
        
        # 处理第3列及以后的特征列
        for idx in range(2, len(row)):
            feature = row[idx].strip()
            row[idx] = '1' if feature in feature_set else '0'
        
        # 写入处理后的行
        writer.writerow(row)

关键改进点

  • 使用set存储特征,将查找时间复杂度从O(n)降为O(1),处理大文件时效率更高;
  • 遍历每个特征列(range(2, len(row))),逐个检查并替换;
  • 使用with语句同时管理输入输出文件,自动处理文件关闭,避免资源泄漏;
  • 添加了空行判断,避免feature-list.txt中的空行干扰匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:40:21