Python:使用多个条件在文件中搜索

Python:使用多个条件在文件中搜索,python,pandas,criteria,multiple-columns,Python,Pandas,Criteria,Multiple Columns,我有一个多栏的文本文件,如下所示: 1000 1 2 3 1000 1.5 2.5 3.1 2000 4 5 6 3000 7 8 9 我想创建一个python脚本,在其中输入一系列3个数字,在前3列中搜索最接近的数字,并返回最后一列的相应值。 例如,如果我输入120012,它应该返回3 更新:第二行和第三行具有相同值的数据之间是否可以进行线性插值? 例如,我的数据是: 1000 100 2 0.1 1200 100 2 0.2 1000 80 3 0.4 我的输入是“1100 100 2”

我有一个多栏的文本文件,如下所示:

1000 1 2 3
1000 1.5 2.5 3.1
2000 4 5 6
3000 7 8 9
我想创建一个python脚本,在其中输入一系列3个数字,在前3列中搜索最接近的数字,并返回最后一列的相应值。 例如,如果我输入
120012
,它应该返回
3


更新:第二行和第三行具有相同值的数据之间是否可以进行线性插值? 例如,我的数据是: 1000 100 2 0.1 1200 100 2 0.2 1000 80 3 0.4 我的输入是“1100 100 2”,它应该返回0.15

  • 打开文件

    values = []
    with open("myfile.txt") as inf:
    
  • 读每一行

        for line in inf:
    
  • 把它转换成数字

            values.append([float(s) for s in line.split()])
    
  • 定义你所说的“最近的”是什么意思。曼哈顿距离?最小二乘法

    def make_manhattan_dist_fn(from):
        def distance_fn(pt):
            return sum(abs(b-a) for a,b in zip(from, pt))
        return distance_fn
    
    my_dist_fn = make_manhattan_dist_fn([1200, 1, 2])
    
    编辑:根据您的评论,您需要

    def make_tuple_dist_fn(from):
        def distance_fn(pt):
            return tuple(abs(b - a) for a,b in zip(from, pt))
        return distance_fn
    
    my_dist_fn = make_tuple_dist_fn([1200, 1, 2])
    
  • 找到最接近的值

    print(min(values, key = my_dist_fn)[-1])
    
    导致

    3.0
    

  • 也许是那样的

    from scipy.interpolate import griddata
    
    input_data = [1100, 100, 4]
    values = []
    
    with open("prova.txt") as lista:
    
    for line in lista:
        if line.find('RPM') == -1:
           values.append([float(s) for s in line.split()])
    
    restricted = []
    for i in range(len(values)):
        if values[i][2] == input_data[2]:
            restricted.append([values[i][0], values[i][1], values[i][3]])
    
    points = []
    valori = []
    
    for i in range(len(restricted)):
        points.append( [restricted[i][0],restricted[i][1]] )
        valori.append( restricted[i][2] )
    
    
    grid_x = input_data[0]
    grid_y = input_data[1]
    
    grid_z1 = griddata(points, valori, (grid_x, grid_y), method='linear')
    
    “prova.txt”是:
    1200 100 4 0.1
    115010040.1
    105010040.2
    1000 100 4 0.2
    1200 90 40.1
    11509040.1
    10509040.2
    10009040.2

    1100 100 2 0.3

    嘿,如果您添加一些在我不知道如何开始时尝试过的代码,那会更好。您可以通过执行
    df=pd.read\u fwf(path\u to\u txt\u file)
    将其读入pandas df中,但您尚未定义最接近的,例如,您只能获得1或2个精确匹配,但剩余值没有那么接近,或者您可以获得所有3个接近但没有精确匹配,这里是否应用了权重?您确实需要对此进行更好的尝试,并在遇到任何问题时返回,目前,这是一个过于宽泛的问题,就像一个“给我代码”类型的问题,这是不喜欢的。我的建议是先把它加载到一个文件中,然后再看看
    np.searchsorted
    或其他搜索函数,等你找到stuck后再回来让我解释一下。应为每列查找最接近的值。因此,如果输入'1200 1 2',它应该取第一个输入的数字(1200),并在第一列中查找最接近的数字(在本例中为1000)。然后,它应该使用第二个数字(1),并在第二列中查找最接近的数字,但只查找满足上限条件的行。输入的第三个数字也是一样的,所以在最后它应该返回满足这些条件的最后一列的Correspondent值。非常感谢。这就是我要找的。有没有可能在第二行和第三行具有相同值的数据之间进行线性插值?例如,我的数据是:1000 100 2 0.1 1200 100 2 0.2 1000 80 3 0.4,我的输入是“1100 100 2”,它应该返回0.15。