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。