如何阅读《Pandas》的第一栏和最后一栏?

2024-10-01 19:17:00 发布

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

我正在寻找解决方案,但找不到任何有效的方法

所以我有一个txt文件。看起来是这样的:

geneName1, sampleName1, Allel, allel2, 055, 33, tumor
geneName2, sampleName1, Allel, allel2, 321, 1, ntn
geneName3, sampleName1, Allel, allel2, 32, 44, ddd
geneName4, sampleName1, Allel, allel2, 123, 2, aga2
geneName1, sampleName2, Allel, allel2, 01255, 23, tumorD
geneName2, sampleName2, Allel, allel2, 33, 1, ad2
geneName1, sampleName3, Allel, allel2, yyu
geneName2, sampleName3, Allel, allel2, hhf
geneName4, sampleName3, Allel, allel2, vgv
geneName5, sampleName3, Allel, allel2, aga5

而且它没有标题。但为了明确起见:

nameOfGene, sampleNumber, Allel1, Allel2, GS1, GS2, descr

如您所见,有些行没有GS1GS2数据,但所有行都有一个descr。 我所需要的就是[nameOfGene,sampleNumber,Allel1,Allel2,descr]

这就是问题所在。我在网上尝试了很多解决方案,但都解决不了

我试图将pd.read_csv中的usecols=[]参数修改为usecols=[0,1,2,3,4,:-1],但pandas不理解类似的内容,因此出现了一个语法错误。 我尝试读取整个df,但是desc被读取为GS1(如果GS1不在同一行)

我尝试了concat,但结果与上面一样,当行没有GS1时,desc被加载为GS1,cols旁边是0或NaN

也许我只是想做点什么,存在解决问题的好办法


Tags: 解决方案gs1descrsamplenumberallelallel2allel1genename2
3条回答

我假定您的文本文件名为myfile.txt

import pandas as pd

my_file = open("myfile.txt")
text = [k.split()[0:4]+[k.split()[-1]] for k in my_file.readlines()]
my_file.close()
df= pd.DataFrame(text)
# next line is optional, just if you want named columns
df.columns = ['nameOfGene','sampleNumber','Allel1','Allel2','descr']
print(df)

   nameOfGene  sampleNumber  Allel1   Allel2   descr
0  geneName1,  sampleName1,  Allel,  allel2,   tumor
1  geneName2,  sampleName1,  Allel,  allel2,     ntn
2  geneName3,  sampleName1,  Allel,  allel2,     ddd
3  geneName4,  sampleName1,  Allel,  allel2,    aga2
4  geneName1,  sampleName2,  Allel,  allel2,  tumorD
5  geneName2,  sampleName2,  Allel,  allel2,     ad2
6  geneName1,  sampleName3,  Allel,  allel2,     yyu
7  geneName2,  sampleName3,  Allel,  allel2,     hhf
8  geneName4,  sampleName3,  Allel,  allel2,     vgv
9  geneName5,  sampleName3,  Allel,  allel2,    aga5

首先,将第一行作为datframe读取。然后,读入两个单独的数据帧,其中所需列的第二个datframe语法为[-2:-1]以读取最后一列。然后在索引上将datframes合并在一起:

cols = pd.read_csv(file, nrows=1).columns
df1 = pd.read_csv(file, usecols=cols[0:3])
df2 = pd.read_csv(file, usecols=cols[-2:-1])
df = pd.merge(df1, df2, how='left',left_index=True, right_index=True)
df

您可能需要编辑文件以包含GS1和GS2中不可用的值。在descr之前添加2个逗号可能会起作用。 在pandas中将其作为数据帧导入后,请使用以下代码

new_df = dataframe[['nameOfGene','sampleNumber','Allel1','Allel2','descr']]

这将存储只包含nameOfGene、sampleNumber、Allel1、Allel2、descr列的新数据帧。 如果只希望第一列和最后一列排除sampleNumber、Allel1和Allel2

相关问题 更多 >

    热门问题