Formdan gelen verilerle yapılan hesabın sonucunda NaN'lardan oluşan bir seri geliyor

Herkese merhaba ben bir flask uygulaması oluşturmaya çalışıyorum.

Burada belirli ürünlerin fiyatları değişiyor. Değişen fiyatlar girilerek maliyet hesaplaması yaptırmak istiyorum. Fakat ekranda verileri girdiğimde maliyet sonucu dönmüyor. Aşağıdaki sonucu alıyorum bunun sebebi ne olabilir ?

Html kodunu da ekliyorum.

<!DOCTYPE html>
<html >
<!--From https://codepen.io/frytyler/pen/EGdtg-->
<head>
  <meta charset="UTF-8">
  <title>ML API TT</title>
  <link href='https://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Arimo' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Hind:300' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
  
</head>

<body>
 <div class="login">
	<h1>BEYANNAME TEST</h1>

     <!-- Main Input For Receiving Query to our ML -->
    <form action="{{ url_for('predict_api_tt')}}"method="post">
        <input type="text" name="20.20.0" placeholder="20.20.0" required="required" />
        <input type="text" name="DAP" placeholder="DAP" required="required" />
		<input type="text" name="%21 AS" placeholder="%21 AS" required="required" />
		<input type="text" name="%26 AS" placeholder="%26 AS" required="required" />
        <input type="text" name="ÜRE" placeholder="ÜRE" required="required" />
        <input type="text" name="MOTORİN" placeholder="MOTORİN" required="required" />
        <button type="submit" class="btn btn-primary btn-block btn-large">HESAPLA</button>
    </form>

   <br>
   <br>
   {{ prediction_text }}<br>

 </div>


</body>
</html>

Bu da app.py kodum

import numpy as np
from flask import Flask, request, render_template
import pandas as pd


app = Flask(__name__)


data=pd.read_excel('C:/Users/iremsezer/Desktop/ürün.xlsx')


@app.route('/')
def home():
    return render_template('beyanname.html')


@app.route('/predict_api_tt',methods=['POST'])
def predict_api_tt():
  input_features = [float(x) for x in request.form.values()]
  features_value = [np.array(input_features)]

  features_name = ['20.20.0', 'DAP', '%21 AS', '%26 AS', 'ÜRE','MOTORİN']

  # df = pd.DataFrame(features_value, columns=features_name)
  
 
  
  gübre_20= input_features[0]
  DAP_gübre=input_features[1]
  AS=input_features[2]
  CAN=input_features[3]
  ÜRE=input_features[4]
  MOTORİN=input_features[5]
  
  maliyet=gübre_20*data['20.20.0 (Kg)']+DAP_gübre*data['DAP (Kg)']+AS*data['%21 AS (Kg)']+CAN*data['%26 CAN (Kg)']+ÜRE*data['ÜRE (Kg)']+MOTORİN*data['Motorin(Lt)']+data['Tohum(Kg/Adet)']*data['Tohum Fiyat']+data['Diğer']*data['Diğer Fiyat']+data['Sulama']*data['Sulama Fiyat']+data['İşçilik']*data['İşçilik Fiyat']+data['Ekim Hasat Makine Gideri']*data['Ekim Hasat Makine Gideri Fiyat']+data['Kira(Dekar)']*data['Kira Fiyat']+data['Bitki Koruma Ürünleri(Lt)']*data['Bitki Koruma Ürünleri Fiyat']
  
  
  

  
  
  
  
  
  
  return render_template('beyanname.html',prediction_text='ürün maliyeti: {}'.format(maliyet))


    # return ret
  
    
if __name__ == "__main__":
   app.run(debug=True)

Merhaba, hangi değerleri giriyorsunuz tam olarak, bir de data adını verdiğiniz dataframe’de ne var: ilk 5 satırını print(df.head().to_dict()) ile paylaşabilir misiniz? Bir de maliyet'in hesabını sözel olarak ifade edebilir misiniz? Onun bir tek sayı olması gerekiyor, değil mi? Ama data['DAP (Kg)'] felan dediğinizde bir sütun seçiyorsunuz (pandas serisi); sonra onu normal sayılarla (formdan gelen) çarparsanız (ve bunları toplarsanız) tekrar bir seri elde edersiniz. Ki şu anki aldığınız çıktıda serinin uzunluğunun da 10 olduğunu görüyoruz. Bunun bir şekilde tek bir sayıya indirgenmesi gerekiyor eğer maliyet bir tek sayıysa.

{'Üretim Dönemi': {0: '2021-2022', 1: '2021-2022', 2: '2021-2022', 3: '2021-2022', 4: '2021-2022'}, 'Ürün Kooperatif Kodu': {0: 31, 1: 40, 2: 60, 3: 100, 4: 105}, 'Grup': {0: 'MEYVE', 1: 'SEBZE', 2: 'MEYVE', 3: 'MEYVE', 4: 'MEYVE'}, 'Üst Ürün Kodu': {0: 'E57605A4-FE32-4313-A576-73ADDEC9C3F4', 1: 'E8A5C989-DA9F-48A0-B543-87780CA68F24', 2: 'ED0A52B2-B1E2-413E-9AE9-AF4DA6CE47AF', 3: '2DF003AB-23E4-43F9-AEF9-036CD1707409', 4: '9CA301F7-1C81-4EA6-A906-4AD07B1C755B'}, 'Üst Ürün Adı': {0: 'ALIÇ', 1: 'BEZELYE', 2: 'ÜZÜM', 3: 'ARMUT', 4: 'ÜZÜM KURUTMALIK'}, 'Product ID': {0: '64A00F94-2EB5-488E-9878-8243A4266F7A', 1: '93AA6278-D510-48D8-B75C-35909B966DFA', 2: '0B815ECD-4017-49E2-AAC2-E37DC15E9385', 3: 'E9286616-D93A-4957-809C-FD5FDADFEF92', 4: 'F8B3B085-C603-4DF9-9929-33FF1EB6330B'}, 'Name': {0: 'MUHTELİF', 1: 'YEMEKLİK', 2: 'ŞARAPLIK', 3: 'MUHTELİF', 4: 'KURUTMALIK ÇEKİRDEKSİZ'}, 'Tohumluk': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, 'Fiyat Girilecek Mi?': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'Benzer': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, 'Birim': {0: 'Dekar', 1: 'Dekar', 2: 'Dekar', 3: 'Dekar', 4: 'Dekar'}, 'Sulu/Kuru Ayrımı Var mı?': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, 'Sulu/Kuru': {0: 'Sulu', 1: 'Sulu', 2: 'Sulu', 3: 'Sulu', 4: 'Sulu'}, 'Maliyet Ayı': {0: 'Ekim', 1: 'Ekim', 2: 'Ekim', 3: 'Ekim', 4: 'Ekim'}, '%21 AS (Kg)': {0: 50, 1: 0, 2: 40, 3: 0, 4: 40}, '%21 AS Fiyat': {0: 3.77, 1: 0.0, 2: 3.77, 3: 0.0, 4: 3.77}, '%26 CAN (Kg)': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, '%26 CAN Fiyat': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}, 'ÜRE (Kg)': {0: 0, 1: 15, 2: 0, 3: 60, 4: 0}, 'ÜRE Fiyat': {0: 0.0, 1: 7.371, 2: 0.0, 3: 7.371, 4: 0.0}, '20.20.0 (Kg)': {0: 25, 1: 30, 2: 40, 3: 50, 4: 40}, '20.20.0 Fiyat': {0: 4.909, 1: 4.909, 2: 4.909, 3: 4.909, 4: 4.909}, 'DAP (Kg)': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, 'DAP Fiyat': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}, 'Tohum(Kg/Adet)': {0: 0, 1: 10, 2: 0, 3: 0, 4: 0}, 'Tohum Fiyat': {0: 0, 1: 16, 2: 0, 3: 0, 4: 0}, 'Motorin(Lt)': {0: 15.0, 1: 10.0, 2: 15.0, 3: 15.5, 4: 15.0}, 'Motorin Fiyat': {0: 7.63, 1: 7.63, 2: 7.63, 3: 7.63, 4: 7.63}, 'Diğer': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'Diğer Fiyat': {0: 0, 1: 0, 2: 100, 3: 0, 4: 200}, 'Sulama': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'Sulama Fiyat': {0: 0, 1: 150, 2: 0, 3: 112, 4: 300}, 'İşçilik': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'İşçilik Fiyat': {0: 0, 1: 263, 2: 1730, 3: 6695, 4: 515}, 'Ekim Hasat Makine Gideri': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'Ekim Hasat Makine Gideri Fiyat': {0: 0, 1: 130, 2: 0, 3: 0, 4: 0}, 'Kira(Dekar)': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'Kira Fiyat': {0: nan, 1: nan, 2: nan, 3: nan, 4: nan}, 'Bitki Koruma Ürünleri(Lt)': {0: 1.0, 1: 0.6, 2: 3.5, 3: 12.0, 4: 0.3}, 'Bitki Koruma Ürünleri Fiyat': {0: 0.0, 1: 217.0, 2: 78.57, 3: 254.0, 4: 226.6}, 'Bir Dekardaki Toplam Maliyet': {0: 425.675, 1: 1167.335, 2: 2566.6049999999996, 3: 10660.975, 4: 1544.59}, 'Kredi Tahsis İçin Oran (%70)': {0: 723.6475, 1: 1984.4695, 2: 4363.228499999999, 3: 18123.6575, 4: 2625.803}, 'Kredi Analitiği Verim': {0: 1000, 1: 1300, 2: 4125, 3: 6000, 4: 1155}, 'Minimum Fiyat': {0: 0.7236475, 1: 1.5265149999999998, 2: 1.0577523636363635, 3: 3.0206095833333335, 4: 2.2734225108225106}, 'Kredi Analitiği Fiyat Tahmin': {0: nan, 1: nan, 2: nan, 3: nan, 4: nan}}

Maliyet hesabı evet tek sayı şeklinde olacak. Maliyet bu hesaplama yapmaya çalıştığım ürünlerden elde edilecek ve tek bir değer olacak dediğiniz gibi. Yukarıda dediğiniz kodu çalıştırdım.

1 Beğeni

“Kira Fiyat” sütununda eksik veri yani NaN var, o yüzden tüm sonuç bundan etkileniyor ve NaN’lardan oluşan bir seri elde ediyorsunuz. Yine de maliyetin hesabını anlamış değilim. Mesela maliyet = motorin * 0.4 + tohum_fiyatı * 0.6 gibi bir şey ise ve buradaki motorin ve tohum_fiyatı düz sayılarsa (12 ve 54 mesela), buradan maliyet de bir sayı olarak hesaplanır (37.2 mesela). Ama yok bunlar sizde olduğu gibi data["..."] şeklinde olup birer pandas serisi olurlarsa, sonuç da (yani maliyet) bir pandas serisi olur. Yani “Kira Fiyat” sütunundaki NaN’ları sayıyla doldurup veya o sütunu görmezden gelip eksiksiz veri ile kodu çalıştırırsanız dahi, maliyet için 10 sayıdan oluşan bir seri elde edersiniz.