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

Python读取CSV文件200行数据仅返回1行,如何排查解决?

问题排查方向

  • 首先检查列表赋值逻辑:你初始化了Test_X = [],但循环内拆分得到的tweet没有执行Test_X.append(tweet)操作,Test_X始终是空列表,后续处理逻辑只会拿到空值,不会处理多轮数据。
  • 其次检查业务逻辑位置:你所有的清洗、预测、写文件代码都放在CSV读取的for循环外部,整个程序只会执行一次预测和写文件操作,自然只会输出1行结果,不会遍历200行数据分别处理。
  • 最后检查CSV分隔符配置:你同时使用了csv.reader的delimiter='\t'参数和line[0].split(';')操作,要确认你的CSV实际分隔符:如果CSV本身就是分号分隔,直接把csv.reader的delimiter改成';'即可,不需要额外拆分。

修复方案

把所有单条数据的处理逻辑挪到循环内部,同时把拆分后的数据存入列表,参考修复后的代码:

import csv
# 提前打开输出文件避免重复IO操作
with open('Hasil Testing SVM.csv', 'a', newline='', encoding='utf-8') as f_svm, \
     open('Hasil Testing NB.csv', 'a', newline='', encoding='utf-8') as f_nb:
    writer_svm = csv.writer(f_svm)
    writer_nb = csv.writer(f_nb)
    
    with open('data testing 2.csv', 'r', encoding="utf-8") as f:
        # 确认分隔符后可以删掉后续split操作
        reader = csv.reader(f, delimiter=';')
        for i, line in enumerate(reader):
            # 如果CSV确实是先制表符分隔再分号分隔,保留下面这行,否则直接用line即可
            # tweet = line[0].split(';')
            tweet = line
            
            # 单条数据处理逻辑移到循环内
            cleaning2 = cleaning([tweet])
            stemming2 = stemming(cleaning2)
            tokenizing2 = tokenizing(stemming2)
            stopwordremoval2 = stopwordremoval(tokenizing2)
            fit_sw2 = fit_sw(stopwordremoval2)
            count_vect2 = count_vect.transform([fit_sw2])
            tf_idf2 = tf_idf.transform(count_vect2)

            hasilpred_svm = model_svm.predict(tf_idf2)
            writer_svm.writerow([fit_sw2, hasilpred_svm[0]])

            hasilpred_nb = model_nb.predict(tf_idf2)
            writer_nb.writerow([fit_sw2, hasilpred_nb[0]])

额外优化建议

  • 不要在循环内反复打开关闭输出文件,提前打开写入对象能大幅提升200行数据的处理效率
  • 预测方法predict返回的是数组,写入的时候取第一个元素hasilpred_svm[0]可以避免写入结果带括号
  • 先打印前几行的line变量确认CSV分隔符,避免两次拆分导致数据错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:54:03