【发布时间】:2021-08-29 16:45:32
【问题描述】:
我的代码读取 CSV 文件中的一列,该文件包含 3 列:区域、离线呼叫和流量。
如果您需要复制/粘贴数据。这是每列的前 10 行。
网外电话:0、421、667、12146、7163、5211、1374、3702、1129、2679、4279
流量:0、30167、23172、215033、126514、130045、75357、257846、77677、79331
我需要“Offnet Calls”和“Traffic”来创建列表。例如,第 3 行将是 [421, 30167] 并从包含相同参数列表的列表中搜索最佳匹配/最接近的值。 看代码就更清楚了:
tp_usp15 = [10, 200]
tp_usp23 = [15, 250]
tp_usp27 = [20, 300]
list_usp = [tp_usp15,tp_usp23, tp_usp27]
tp_bsnspls_s = [1,30]
tp_bsnspls_steel = [13,250]
tp_bsnspls_chrome = [18,350]
list_bsnspls = [tp_bsnspls_s,tp_bsnspls_steel,tp_bsnspls_chrome]
tp_bsnsrshn10 = [10,200]
tp_bsnsrshn15 = [15,300]
tp_bsnsrshn20 = [20,400]
list_bsnsrshn = [tp_bsnsrshn10,tp_bsnsrshn15,tp_bsnsrshn20]
common_list = list_usp + list_bsnspls + list_bsnsrshn
例如,从代码中提供的这个列表中,第 3 行 = [421, 30167] 的最接近值/最佳匹配是 [20, 400] = tp_bsnsrshn20。我需要一个代码来对 CSV 文件中的所有值进行相同的操作。需要将最接近的值/最佳匹配记录到下一列(应在“流量”列旁边创建一个名为“最佳匹配”的新列)。我有一个适用于输入的代码。 2 个用户输入创建一个列表,并从列表列表中完成搜索。
client_traffic = int(input("Enter the expected monthly traffic: "))
client_offnet = int(input("Enter monthly offnet calls: "))
list_client = [client_payment, client_offnet]
from functools import partial
def distance_squared(x, y):
return (x[0] - y[0])**2 + (x[1] - y[1])**2
best_match_overall = min(common_list, key=partial(distance_squared, list_client))
name_best_match_overall = [k for k,v in locals().items() if v == best_match_overall][0]
如何将此代码应用于整个 CSV 文件。顺便说一句,它还给出了值的名称。我想高级用户应该不难创建一些循环,该循环将按照我在上一个代码中提供的相同概念工作,但适用于整个文件。
【问题讨论】:
-
要仔细检查,您正在尝试读取一个包含两列的 CSV 文件,并且您试图在 CVS 文件中找到与给定值的每一行最接近的正确值对,对吗?跨度>
-
@Mazen 正确!请问有什么代码思路吗?
-
我会马上处理的。