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

Python中筛选后列表保存为CSV文件异常问题求助

问题分析与解决方案

核心问题

你的代码存在两个关键错误导致筛选失效:

  • 筛选逻辑错误:判断x>Lower2SD or x<Upper2SD等价于所有数值都满足(任何数要么大于下限,要么小于上限),这会保留全部原始数据。正确逻辑应该是同时满足大于下限且小于上限(x > Lower2SD and x < Upper2SD)。
  • 仅提取单列数据:你用filter只提取了Area列的数值,没有保留完整的样本行数据,后续用csv模块写入时也只保存了Area值,丢失了其他列信息。

修正后的代码

直接用Pandas完成筛选和保存,更简洁高效:

import pandas as pd

# 读取原始数据
data = pd.read_csv('/Users/myname/Documents/Data/MyData.csv')

# 统计计算
count_row = data.shape[0]
print("N =", count_row)

mean = data["Area"].mean().round(2)
print("Average = ", mean)

sd = data["Area"].std().round(2)
print("SD =", sd)

Lower2SD = mean - (2 * sd)
Upper2SD = mean + (2 * sd)

print("Mean - 2SD =", "%.2f" % Lower2SD)
print("Mean + 2SD =", "%.2f" % Upper2SD)
print("Mean +- 2SD = ", "%.2f" % Lower2SD, "to", "%.2f" % Upper2SD)

# 筛选超出范围的数据(用于验证)
below = data[data["Area"] < Lower2SD]["Area"].tolist()
print("\nValue(s) of specimens below the Mean -2SD: ")
print(below)

above = data[data["Area"] > Upper2SD]["Area"].tolist()
print("\nValue(s) of specimens exceeding the Mean +2SD: ")
print(above)

# 筛选符合条件的完整行数据
adjusted_data = data[(data["Area"] > Lower2SD) & (data["Area"] < Upper2SD)]

print("\nNumber of specimens within 2SD: ", adjusted_data.shape[0])

# 保存完整数据到新CSV
adjusted_data.to_csv('/Users/myname/Documents/Data/AdjustedData.csv', index=False, encoding='UTF8')

关键修改说明

  • 修正筛选逻辑:用(data["Area"] > Lower2SD) & (data["Area"] < Upper2SD)替代错误的or逻辑,确保只保留均值±2标准差范围内的样本。
  • 保留完整行数据:直接对DataFrame进行筛选,保留所有列信息,而非仅提取Area列。
  • 使用Pandas内置方法:用to_csv直接保存筛选后的DataFrame,无需手动遍历写入,避免出错且效率更高。
  • 增加验证输出:添加符合条件的样本数量统计,方便快速确认筛选结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:32:16