我有一个 CSV 文件中的土壤样本
pH K Zn Fe Cu Mn
Soil 1 7.74 279 0.48 6.4 0.21 4.7
Soil 2 9.02 247 0.27 6.4 0.16 5.6
Soil 3 7.8 265 0.46 6.2 0.51 6.1
Soil 4 8.36 127 0.5 3.1 0.28 2.3
我需要读取每个土壤样本,对于每个元素,我需要添加一个特定的公式来检查土壤是否肥沃、不肥沃或肥沃。
我的概念是将 CSV 转换为列表,然后从收到的 2D 列表中,我可以迭代该行的每个元素并检查每个营养素的参数。
我使用了以下代码:
import csv
import pandas as pd
from pandas import DataFrame
with open('datan.csv', newline='') as soil_file: #CSV datafile
soil_reader = csv.reader(soil_file)
data = list(soil_reader)
data.pop(0) #first row is string
for i in data:
for j in i: #iterate through each element of the row
if((float(j) >= 5.1 and float(j) <= 6.5) or (float(j) >= 7.6 and float(j) <= 8.5)):
print("Soil is low fertile") #condition
elif((float(j) < 5) or (float(j) > 8.5)):
print("Soil is Non fertile")
else:
print("Soil is fertile")
问题是,循环从第一个元素开始,直到最后一行的末尾,而不会在行末尾停止,并且在所有情况下条件均为 true。这样我就得到了所有 24 个元素的结果。
我需要的是循环应该检查第一个土壤样本并打印结果,然后移动到下一个土壤样本。
我不知道如何在这里实现 pandas,但在某处读过,通过 Dataframe 我可以使用以下方式读取索引:
df.index
但这会读取整个列而不是行!我需要的是有点像:
for Soil 1:
if df[index] == 'ph':
Use func pH()
elif df[index] == 'K':
Use func K()
等等...
PS我犯了一个愚蠢的错误,没有在循环中添加计数器
我对代码进行了一些更改,现在循环在读取第一个元素后停止,但不检查函数内的其他条件。
import csv
import pandas as pd
from pandas import DataFrame
def pH(j):
if ((float(j) >= 5.1 and float(j) <= 6.5) or (float(j) >= 7.6 and float(j) <= 8.5)):
print("Soil is low fertile")
幕布斯7119047
相关分类