Czytam plik csv z dziesięcioma kolumnami.

Mój wzór powinien podzielić pierwszy wektor przez drugi wektor. Pierwszy wektor składa się z pierwszych pięciu wartości (czyli pierwszych pięciu kolumn danych exe), a drugi wektor składa się z pięciu ostatnich wartości (czyli ostatnich pięciu kolumn danych exe). Teraz chcę wykonać obliczenia dla każdego wiersza ze wzorem. Oznacza to, że chcę obliczyć pierwszy wiersz, drugi wiersz, trzeci wiersz i tak dalej ... z wyjściem (wektorem). Na przykład dla pierwszego rzędu:

left = data_one.values[0,0:5]
right = data_one.values[0,5:10]
def symmetryRatio():
     result_one = left/right 
     print("The result is: " +str(result_one))

To jest mój przykład csv - dane z pięcioma wierszami (ale mogę też mieć dane z 100 lub więcej wierszami):

1,00,0,80,0,40,0,20,0,50,1,20,0.90,0,30,0,20,0,34

1.10,0.85,0.50,0.21,0.59,1.30,0.95,0.40,0.21,0.42

0,90, 0,90, 0,45, 0, 23, 0, 50, 1, 10, 1, 00, 0, 35, 0, 23, 0,35

1,05,0.70,0.40,0.28,0.57,1.25,0.80,0.30,0.28,0.38

0,95, 0, 75, 0, 45, 0, 30, 60, 1, 15, 0, 85, 0, 35, 0, 30, 0, 42

Zacząłem już od nowej metody, która powinna przebiegać po każdym wierszu:

data_one=pd.read_csv("file:///C:/Users/...../healthyValues.csv")
def rowPass():
    for line in data_one:
       print(line)
    return 0

A teraz nie wiem, jak mam iść.

Mam nadzieję, że jest jasne, co chcę zrobić.

W końcu powinny być (tak mi się wydaje) dwie metody. Jeden, który wykonuje obliczenia (symmetryRatio ()) za pomocą formuły i ten, który przechodzi przez wiersz (rowPass ()).

Dziękuję za pomoc.

EDYTUJ:

Teraz obliczyłem średnie wartości średnie we wszystkich kolumnach. Następnie umieściłem te wartości w dwóch wektorach. Następnie ponownie użyłem wzoru dla obu wektorów.

one = data_one.iloc[:,0].mean()
two = data_one.iloc[:,1].mean()
three = data_one.iloc[:,2].mean()
four = data_one.iloc[:,3].mean()
five = data_one.iloc[:,4].mean()
six = data_one.iloc[:,5].mean()
seven = data_one.iloc[:,6].mean()
eight = data_one.iloc[:,7].mean()
nine = data_one.iloc[:,8].mean()
ten = data_one.iloc[:,9].mean()
#first vector:
 vek1=np.array([one1,two1,three1,four1,five1])
#second vector
 vek2=np.array([six1,seven1,eight1,nine1,ten1])
def symmetryRatio():
   res=vek1/vek2
   print(res)

Innymi słowy, mam dwa przypadki:

  1. obliczenia dla wszystkich wierszy (zobacz poprawną odpowiedź GiovaniSalazara)
  2. Obliczanie średniej wartości średniej we wszystkich kolumnach -> pierwsze pięć wartości w jednym wektorze i pięć ostatnich wartości w jednym wektorze (patrz mój kod)

Czy jest możliwość zrobienia tego obu metod jedną lub lepiej dwoma? I jak?

0
mathflower 29 grudzień 2019, 20:01

1 odpowiedź

Najlepsza odpowiedź

Spróbuj z takimi ... z pandami (pip install pandas) i numpy (pip install numpy):

import pandas as pd
from io import StringIO
import numpy as np

data = """
1.00,0.80,0.40,0.20,0.50,1.20,0.90,0.30,0.20,0.34
1.10,0.85,0.50,0.21,0.59,1.30,0.95,0.40,0.21,0.42
0.90,0.90,0.45,0.23,0.50,1.10,1.00,0.35,0.23,0.35
1.05,0.70,0.40,0.28,0.57,1.25,0.80,0.30,0.28,0.38
0.95,0.75,0.45,0.30,0.60,1.15,0.85,0.35,0.30,0.42
"""
df = pd.read_csv(StringIO(data), sep=',',header=None)
df1=df.to_numpy()

for line in df1:
  result_one = line[[0,1,2,3,4]]/line[[5,6,7,8,9]]
  print("The result is: " +str(result_one))

Wynik:

The result is: [0.83333333 0.88888889 1.33333333 1.         1.47058824]
The result is: [0.84615385 0.89473684 1.25       1.         1.4047619 ]
The result is: [0.81818182 0.9        1.28571429 1.         1.42857143]
The result is: [0.84       0.875      1.33333333 1.         1.5       ]
The result is: [0.82608696 0.88235294 1.28571429 1.         1.42857143]
0
GiovaniSalazar 29 grudzień 2019, 18:41