python中的Vlookup
我是python新手,学习速度尽可能快。我知道如何在bash中解决问题,并尝试在python上工作。 我有一个数据文件(示例中为data_array.csv)和一个索引文件index.csv,我希望从索引文件中具有相同ID的数据文件中提取数据,并存储到一个新文件Out.txt中。我还想把NA放在Out.txt中,用于那些在数据文件中没有值的ID。我知道如何为一个专栏做这件事。但我的数据有1000多列(从1到1344)。我想让你帮我写一个脚本,它可以做得更快。我的数据文件、索引id和建议如下 数据_array.csv index.csv 所需输出为 Out.txt 我试过了python中的Vlookup,python,text-processing,Python,Text Processing,我是python新手,学习速度尽可能快。我知道如何在bash中解决问题,并尝试在python上工作。 我有一个数据文件(示例中为data_array.csv)和一个索引文件index.csv,我希望从索引文件中具有相同ID的数据文件中提取数据,并存储到一个新文件Out.txt中。我还想把NA放在Out.txt中,用于那些在数据文件中没有值的ID。我知道如何为一个专栏做这件事。但我的数据有1000多列(从1到1344)。我想让你帮我写一个脚本,它可以做得更快。我的数据文件、索引id和建议如下 数据
#! /usr/bin/python
import csv
with open('data_array.csv','r') as lookuplist:
with open('index.csv', "r") as csvinput:
with open('VlookupOut','w') as output:
reader = csv.reader(lookuplist)
reader2 = csv.reader(csvinput)
writer = csv.writer(output)
for i in reader2:
for xl in reader:
if i[0] == xl[0]:
i.append(xl[1:])
writer.writerow(i)
但它只适用于第一排。我希望程序能够处理数据文件的整行和整列 它只输出第一行,因为第一次在reader中的
xl之后,您位于文件的末尾。之后需要指向文件的开头。为了提高效率,您可以先将csvinput
读入字典,然后使用字典查找来获取所需的行:
#! /usr/bin/python
import csv
with open('data_array.csv','r') as lookuplist:
with open('index.csv', "r") as csvinput:
with open('VlookupOut','w') as output:
reader = csv.reader(lookuplist)
reader2 = csv.reader(csvinput)
writer = csv.writer(output)
d = {}
for xl in reader2:
d[xl[0]] = xl[1:]
for i in reader:
if i[0] in d:
i.append(d[i[0]])
writer.writerow(i)
当您在reader中使用xl的读取CSV文件时,它将遍历每一行,直到到达末尾。但它只会这样做一次。您可以使用.seek(0)
告诉它返回CSV文件的第一行
程序匹配索引和数据文件,并仅执行索引中数据文件的值。我对执行下一步示例中的所有索引感兴趣。@Abraham,当然。刚刚将writer.writerow(i)
移动到if
语句之外
Id 1 2 3 . . 1344
1 10 20 30 . . -1
2 20 30 40 . . -2
8 80 70 80 . . -6
9 NA NA NA NA
10 100 80 90 . . -7
#! /usr/bin/python
import csv
with open('data_array.csv','r') as lookuplist:
with open('index.csv', "r") as csvinput:
with open('VlookupOut','w') as output:
reader = csv.reader(lookuplist)
reader2 = csv.reader(csvinput)
writer = csv.writer(output)
for i in reader2:
for xl in reader:
if i[0] == xl[0]:
i.append(xl[1:])
writer.writerow(i)
#! /usr/bin/python
import csv
with open('data_array.csv','r') as lookuplist:
with open('index.csv', "r") as csvinput:
with open('VlookupOut','w') as output:
reader = csv.reader(lookuplist)
reader2 = csv.reader(csvinput)
writer = csv.writer(output)
d = {}
for xl in reader2:
d[xl[0]] = xl[1:]
for i in reader:
if i[0] in d:
i.append(d[i[0]])
writer.writerow(i)
#! /usr/bin/python
import csv
with open('data_array.csv','r') as lookuplist:
with open('index.csv', "r") as csvinput:
with open('VlookupOut','w') as output:
reader = csv.reader(lookuplist)
reader2 = csv.reader(csvinput)
writer = csv.writer(output)
for i in reader2:
for xl in reader:
if i[0] == xl[0]:
i.append(xl[1:])
writer.writerow(i)
lookuplist.seek(0)