在 Python 中将过滤列表保存到 .CSV 文件

问题描述 投票:0回答:1

我有一个 CSV 文件,其中包含示例对象的测量值。我已经能够使用 Pandas 和 Python 统计模块来过滤列表。然后,我尝试排除与平均值小于 2 个标准差或大于 2 个标准差的对象,然后将最终列表保存到新的 csv 文件中。 shell 的打印输出确认过滤和统计计算是否按预期工作。但是,新的 CSV 文件仍然包含所有原始对象。

我已尝试研究该问题,但尚未确定我犯了什么错误或如何修复它。将不胜感激任何帮助。

以下是我的代码:


import statistics
import pandas as pd
import csv

data = pd.read_csv('/Users/myname/Documents/Data/MyData.csv')

count_row = data.shape[0]  # Gives number of rows (items)
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)
print ("Mean - 2SD =","%.2f" % Lower2SD)

Upper2SD = mean + (2*sd)

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

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

new =list(filter(lambda x: x<Lower2SD, data["Area"]))
print()
print("Value(s) of specimens below the Mean -2SD: ")
print(new)

new =list(filter(lambda x: x>Upper2SD, data["Area"]))
print()
print("Value(s) of specimens exceeding the Mean +2SD: ")
print(new)

adjusted=list(filter(lambda x: x>Lower2SD or x<Upper2SD, data["Area"]))
print()
print("Value(s) of specimens within 2SD: ")
print(adjusted)

global header
header = ["Area"]

with open('/Users/myname/Documents/Data/AdjustedData.csv', 'a', encoding='UTF8', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(header)

    for i in adjusted:
        writer.writerow([i])

Sample data

python list filter statistics export-to-csv
1个回答
0
投票
x>Lower2SD or x<Upper2SD

这个情况就是问题所在。

如果分数非常低,则

x<Upper2SD
为真,因此将包含在过滤列表中。

如果分数非常高,则

x>Lower2SD
为真,因此将包含在过滤列表中。

我认为你想要的是

and
条件,而不是
or

© www.soinside.com 2019 - 2024. All rights reserved.