小风0000 发表于 2016-08-16 05:04

python 按列名提取多列

本帖最后由 小风0000 于 2016-08-16 05:07 编辑

dat='''
SNPID A702Y A704Y A706Y A708Y A710Y
ARS-BFGL-BAC-10172 CC CC CC CC CC
ARS-BFGL-BAC-1020 CC CC CT CC CC
'''

names=["SNPID","A702Y","A710Y"]由于数据比较大,有4万行,7000列,要提出800列的数据,大家有什么好的办法吗?
script,originalFN,targetFN = sys.argv
originalInds = open(originalFN).readline().strip().split()
targetInds =
targetF=open("targetInds.txt","w")

#find index
idx = [ originalInds.index(ind) for ind in targetInds if ind in originalInds ]
idx.insert(0,0)

#output
for num,line in enumerate(open(originalFN)):
    print num
    tmp = for i in idx]
    targetF.write(" ".join(tmp)+"\n")

targetF.close()
这是我写的代码,先取出列名的下标,再在大文件一行行弄出来,有点慢,求助!

吃瓜群众 发表于 2016-08-16 10:36

你可以用pandas库,都有封装

小风0000 发表于 2016-08-16 12:02

回复 2# 吃瓜群众

不行啊,直接报错,out of memory。文件太大了,有没有什么更好的办法?

   

吃瓜群众 发表于 2016-08-16 14:33

回复 3# 小风0000
你可以把大文件分成小文件处理,最后再归并。

   

小风0000 发表于 2016-08-16 23:20

回复 4# 吃瓜群众

不应该啊,我用python就想着处理大文件方便,要是分成小文件,我还不如用R处理。
肯定有更简单,高效地写法吧!

   

bskay 发表于 2016-08-18 08:24

对于这样的情况,一定要用到mmap才行

Northland 发表于 2016-09-19 00:55

#output
num = 0
for line in open(originalFN).xreadlines() :
    num += 1
    print num
    tmp = for i in idx]
    targetF.write(" ".join(tmp)+"\n")
页: [1]
查看完整版本: python 按列名提取多列