亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從csv文件中讀取行的每一列數據并根據列索引應用公式

從csv文件中讀取行的每一列數據并根據列索引應用公式

喵喵時光機 2023-10-31 21:37:54
我有一個 CSV 文件中的土壤樣本        pH    K      Zn      Fe  Cu     MnSoil 1  7.74 279    0.48    6.4 0.21    4.7Soil 2  9.02 247    0.27    6.4 0.16    5.6Soil 3  7.8  265    0.46    6.2 0.51    6.1Soil 4  8.36 127    0.5     3.1 0.28    2.3我需要讀取每個土壤樣本,對于每個元素,我需要添加一個特定的公式來檢查土壤是否肥沃、不肥沃或肥沃。我的概念是將 CSV 轉換為列表,然后從收到的 2D 列表中,我可以迭代該行的每個元素并檢查每個營養素的參數。我使用了以下代碼:    import csvimport pandas as pdfrom pandas import DataFramewith 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 csvimport pandas as pdfrom pandas import DataFramedef 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")
查看完整描述

1 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

您可以使用 df['pH'] 或 df.pH 直接訪問列(如果列名稱沒有空格或特殊字符)


您是否同意再有一個代表生育能力的專欄,或者您是否需要打印聲明(想在評論中詢問,但沒有足夠的聲譽)


對于表示生育力的另一列,您可以使用 loc 并通過您的過濾器


df.loc[df.ph>=5.1,"fertility"] = "fertile"


用于循環遍歷您的列:


for col in df.columns:

  # displaying 

  display(df.loc[df[col]>6])

如果您只有多個輸出和每個輸出的公式,您可以使用:


filter_criteria = {"fertile":(df.pH>8)&(df.K<200),"non-fertile":(df.pH>7.5)&(df.K>240),"low":(df.pH>7.5)&(df.K>270)}

for key in filter_criteria.keys():

 df.loc[filter_criteria[key],"fertility"] = key


查看完整回答
反對 回復 2023-10-31
  • 1 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號