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

Python数据集清洗求助:移除含-1的行失败问题

解决CIC2018数据集预处理的两个问题

问题1:移除含-1的行不彻底

问题原因

你的代码存在两个核心错误:

  • 未将收集到的dfs列表合并为merged_df,直接调用merged_df.to_csv属于逻辑漏洞(若未提前定义会直接报错);
  • 移除-1的操作仅作用于最后一个CSV文件的DataFrame(df),而非合并后的完整数据集,导致保存的文件仍是未处理的原始合并数据,自然残留大量-1。

修正代码

import os
import glob
import pandas as pd

dir_name = "/temp/CIC2018"
csv_files = glob.glob(os.path.join(dir_name, "*.csv"))
dfs = []

for csv_file in csv_files:
    df = pd.read_csv(csv_file, low_memory=False)
    dfs.append(df)
print("Number of CSV files:", len(csv_files))

# 关键步骤:合并所有CSV文件的DataFrame
merged_df = pd.concat(dfs, ignore_index=True)
# 保存原始合并数据(可选)
merged_df.to_csv("C:/temp/CIC2018/Output/CIC2018-Umodified-Merged.csv", index=False)

print("Original Shape", merged_df.shape)

# 对合并后的完整数据集移除含-1的行
print("Removing -1")
cleaned_df = merged_df[~(merged_df.isin([-1])).any(axis=1)]
print("Cleaned Shape:", cleaned_df.shape)

# 保存清理后的数据
cleaned_df.to_csv("C:/temp/CIC2018/Output/CIC2018-Cleaned-Merged.csv", index=False)

问题2:触发KeyError

问题原因

merged_df.drop(index=rows_to_drop)中的rows_to_drop是完整DataFrame,但drop方法的index参数仅接受行索引标签值,而非整个DataFrame,因此触发索引不存在的报错。

修正代码

将index=rows_to_drop替换为index=rows_to_drop.index,或直接简化写法:

# 方式1:修正原代码
rows_to_drop = merged_df[merged_df.applymap(lambda x: x == -1).any(axis=1)]
merged_df.drop(index=rows_to_drop.index, inplace=True)

# 方式2:更简洁的直接过滤(推荐)
merged_df = merged_df[~merged_df.applymap(lambda x: x == -1).any(axis=1)]

补充说明

若数据中存在字符串形式的"-1",需额外处理以确保彻底清理:

# 同时过滤数值-1和字符串"-1"
cleaned_df = merged_df[~(merged_df.isin([-1, "-1"])).any(axis=1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:39:50