我正在尝试获得介于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
答案 0 :(得分:0)
您必须遵循该语言的格式。在这种情况下,如果您想使用l
和w
运行双循环:
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。