使用列表创建数据帧不正确

2024-04-26 13:39:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过读取文本文件,使用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]

我的代码怎么了?你知道吗

谢谢你。你知道吗

罗德里戈


Tags: 数据代码importandfassysline
1条回答
网友
1楼 · 发布于 2024-04-26 13:39:10

不要用手看文件。使用熊猫强大的read_csv

df = pd.read_csv(query, sep='\t')

完整程序:

import sys
import pandas as pd

query = sys.argv[1]
df = pd.read_csv(query, sep='\t')
print df

相关问题 更多 >