Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的Vlookup_Python_Text Processing - Fatal编程技术网

python中的Vlookup

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和建议如下 数据

我是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 我试过了

#! /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)