使用列表创建不正确的Pandas DataFrame

时间:2015-05-10 19:25:20

标签: python list pandas dataframe

我想通过阅读文本文件使用Python的Panda创建数据框。这些值是制表符分隔的,但是当我使用此代码时:

import sys
import pandas as pd

query = sys.argv[1]

df = pd.DataFrame()

with open(query) as file_open:

    for line in iter(file_open.readline, ''):

        if line.startswith("#CHROM"):
            columns = line.split("\t")

        if line.startswith("chr7"):
            df = df.append(line.split("\t"))

print df
print len(df)

我的输出是:

...
0                                                chr7
1                                           158937585
2                                           rs3763427
3                                                   T
4                                                   C
5                                              931.21
6                                                   .
7   AC=2;AF=1.00;AN=2;DP=24;Dels=0.00;FS=0.000;HRu...
8                              GT:DP:GQ:PL:A:C:G:T:IR
9         1/1:24:72.24:964,72,0:0,0:11,12:0,0:0,0:0\n
0                                                chr7
1                                           158937597
2                                                   .
3                                                   C
4                                                  CG
5                                              702.73
6                                                   .
7   AC=2;AF=1.00;AN=2;BaseQRankSum=-1.735;DP=19;FS...
8                              GT:DP:GQ:PL:A:C:G:T:IR
9         1/1:19:41.93:745,42,0:0,0:10,8:0,0:0,0:17\n

[510350 rows x 1 columns]
510350

文本文件包含以下格式:

#CHROM \t POS \t ID \t REF \t ALT \t QUAL \t FILTER \t INFO \n
chr7 \t 149601 \t tMERGED_DEL_2_39754 \t T \t .\t 141.35 \t . \t AC=0;AF=0.00;AN=2;DP=37;MQ=37.00;MQ0=0;1000gALT=<DEL>;AF1000g=0.09.. \n
chr7 \t 149616 \t rs190051229 \t C \t . \t 108.65 \t . \t AC=0;AF=0.00;AN=2;DP=35;MQ=37.00;MQ0=0;1000gALT=T;AF1000g=0.00.. \n
...

我希望数据框看起来像:

 #CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO   
 chr7  149601  MERGED..   T      .       141.35    .    AC=0;AF=0.00;A..
 chr7  149616  rs1900..   C      .       108.65    .    AC=0;AF=0.00;A..
 ...

使用上面的代码读取每一行创建该行中值的列表:

['chr7','149601','MERGED..','T','.','141.35','.','AC=0;AF=0;A..'\n]

我的代码有什么问题?

谢谢。

罗德里戈

0 个答案:

没有答案