从依赖于其他数据的数据中获取值

时间:2018-05-18 05:47:06

标签: python pandas

我正在尝试获得介于0,1之间的l输入。 l输入将用于A列。第二个输入将是'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 :(得分:0)

您必须遵循该语言的格式。在这种情况下,如果您想使用lw运行双循环:

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

请注意缩进,如果你没有正确缩进,那么python代码将无法正常工作。

此外,您的代码似乎无法完成任何事情,除了打印相同的东西200次。你想做什么?

答案 1 :(得分:0)

好吧,我假设你想从你的矩阵中得到一个特定的值,这取决于两个输入值l和w,所以如果l在0和1之间,则应该选择'A'。 (我进一步假设,如果l在1 nd 2之间,它的列'B',2&lt; = l&lt; 3 - &gt;'c',依此类推......) 该行直接从w与mesafe列中的数据导出:如果w在0和100之间 - >第0行,100到1000之间 - &gt;第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。