我在excel中寻找与vlookup函数等价的函数。我有一个在csv文件中读取的脚本。我希望能够从.csv中的另一列查询关联值。迄今为止的脚本:
import matplotlib
import matplotlib.mlab as mlab
import glob
for files in glob.glob("*.csv"):
print files
r = mlab.csv2rec(files)
r.cols = r.dtype.names
depVar = r[r.cols[0]]
indVar = r[r.cols[1]]
print indVar
这将从脚本所在文件夹中的.csv文件中读取。在上面的示例中,depVar是.csv中的第一列,indVar是第二列。在我的例子中,我知道indVar的值,我想返回depVar的相关值。我想添加如下命令:
depVar = r[r.cols[0]]
indVar = r[r.cols[1]]
print indVar
depVarAt5 = lookup value in depVar where indVar = 5 (I could sub in things for the 5 later)
在我的例子中,所有字段中的所有值都是数字,indVar的所有值都是唯一的。我想能够定义一个新的变量(在上一个例子中是depVarAt5)等于关联的值。
下面是.csv内容示例,将文件命名为任意名称,并将其与脚本放在同一文件夹中。在本例中,depVarAt5应设置为16.1309。
Temp,Depth
16.1309,5
16.1476,94.4007
16.2488,100.552
16.4232,106.573
16.4637,112.796
16.478,118.696
16.4961,124.925
16.5105,131.101
16.5462,137.325
16.7016,143.186
16.8575,149.101
16.9369,155.148
17.0462,161.187
不确定这个
r
对象是什么,但是由于它有一个名为cols
的成员,我假设它也有一个名为rows
的成员,其中包含行数据。在这种情况下,伪代码几乎包含有效的生成器表达式/列表理解。
变成
或者,更普遍地说
所以
如果你能保证每个输入只有一个输出,那么在它的末尾加一个
[0]
。Python标准库中还有一个
csv
模块,您可能更愿意使用它。=)我认为这很直接地解决了你的问题:
我很确定numpy是matplotlib的先决条件。
对于任意顺序和精确匹配,可以对返回的索引使用
indVar.index()
和索引depVar
。如果
indVar
是有序的,并且(好吧,“或者”,某种程度上)您需要最接近的匹配,那么您应该考虑在indVar
上使用bisect
。相关问题 更多 >
编程相关推荐