получить значение из данных, которые зависят от других данных - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь получить ввод l, который будет между 0,1.ввод l будет для столбца.и вторым вводом будет столбец «mesafe», поэтому результат должен быть 23, что для A и нулевого столбца mesafe.Я получаю некоторую ошибку.

import pandas as pd
import numpy as np

def var():
    df = pd.read_csv('l_y.txt')
    l=float(input("speed of the wind:"))
    w=int(input("range:"))
    for l in range(0, 1) and w in range(0, 100) :
        print(df['A'].values[0])




l_y.txt=(  mesafe      A     B     C     D     E     F
       0     100     23    18    14     8     4     0
       1    1000    210   170   110    60    40    30
       2    5000    820   510   380   300   230   160
       3   10000   1600  1200   820   560   400   250
       4   20000   2800  2100  1600  1000   820   500
       5   50000   5900  4600  3400  3200  1600  1100
       6  100000  10000  8100  6100  3900  2800  2000 )    






Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    var()
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\ml.py", line 
8, in var
    for l in range(0, 1) and w in range(0, 100) :
TypeError: 'bool' object is not iterable

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Хорошо, я предполагаю, что вы хотите получить определенное значение из вашей матрицы в зависимости от двух входных значений l и w, поэтому, если l находится между 0 и 1, следует выбрать столбец «A».(Далее я предполагаю, что если l находится между 1 и 2, это столбец «B», 2 <= l <3 -> «c» и т. Д.). Строка напрямую получается из w с данными вmesafe-column: если w - от 0 до 100 -> строка 0, от 100 до 1000 -> строка 1 и т. д. *

Что ж, это можно сделать следующим образом:

l = .3   # let's say user types 0.3

Существует некоторое сопоставление между l и буквами:

l_mapping = [1, 5, 12, 20, 35, 50]    # These are the thresholds between the columns A...F

l_index = np.searchsorted(l_mapping, l)   # calculate the index of the column letter

col = df.columns[1:][l_index]    # this translates l to the column names from A...F

col     # look what col is when l was < 1
Out: 'A'

w = 42   # now the user Input for w is 42

row = np.searchsorted(df.mesafe.values, w)   # this calculates the fractional index of w in df.mesafe

row
Out: 0

Итак, с этими двумя формулами вы получаете информацию столбца и строки для индексации желаемого результата:

df[col].iloc[row]
Out: 23

Суммированиевсе это в функции будет выглядеть так:

def get_l_y(l, w, df_ly):
    l_mapping = [1, 5, 12, 20, 35, 50]
    l_index = np.searchsorted(l_mapping, l)
    col = df_ly.columns[1:][l_index]
    row = np.searchsorted(df.mesafe.values, w)
    print(l, w, col, row)    # print Input and calculated row- and column- values for testing purpose, can be deleted/commented out if everything works as you want 
    return df[col].iloc[row]

Эта функция ожидает l, w и pandas-dataframe вашей матрицы в качестве входных параметров и возвращает l_y.

0 голосов
/ 18 мая 2018

Вы должны следовать формату языка.В этом случае, если вы хотите запустить двойной цикл с l и w:

for l in range(0, 1):
    for w in range(0, 100) :
        print(df['A'].values[0])

Обратите внимание на отступ, если вы не сделаете отступ правильно, то коды Python не будут работать правильно.

Кроме того, ваш код здесь, кажется, не выполняет ничего, кроме печати одной и той же вещи 200 раз.Что ты пытаешься сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...