如何从Datafram中删除重复的列和最后5行

2024-09-26 23:24:17 发布

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

我有50个DataFrame,它是tab分隔的,有两列。我需要在这些文件中添加列名。你知道吗

下面是一个文件的示例

    ==> PE07_ID.count <==
ENSG00000000003 0
ENSG00000000005 0
ENSG00000000419 586
ENSG00000000457 97

==> PE07_REL.count <==
ENSG00000000003 2
ENSG00000000005 0
ENSG00000000419 954

==> PE08_ID.count <==
ENSG00000000003 0
ENSG00000000005 0
ENSG00000000419 317

我需要的是给每一列添加列名,我的意思是第一列可以命名为“Gene”,第二列应该以文件名命名

这是我到目前为止试过的

我先打电话给所有的档案

 path       = '/user/home/files' 
files = os.listdir(path)

files_txt  = [os.path.join(path,i) for i in files if i.endswith('count')]

## Change it into dataframe
dfs_patty = [pd.DataFrame.from_csv(x, sep='\t') for x in files_txt]

文件看起来像这样,50个数据帧

['/user/home/AE02_REL.count',
 '/user/home/AE04_REL.count',
 '/user/home/AE05_ID.count',
 '/user/home/AE05_REL.count'....]

在这之后,我尝试添加两个标题名或列名

path       = '/home/user/dir/' 

file_names = []
data_frames = []

for filename in os.listdir(path): 
    name = os.path.splitext(filename)[0] 
    file_names.append(name) 
    df = pd.read_csv(path + filename, header=None,sep='\t') 
    df.rename(columns={1: name, 0:'Gene'}, inplace=True)
    #df.columns = ["Gene",filename]
    data_frames.append(df)
combined = pd.concat(data_frames, axis=1)

那么

combined.head()

Gene    AE02_REL    Gene    AE04_REL    Gene    AE05_ID Gene    AE05_REL    Gene    AE07_REL    ... Gene    PL08_REL    Gene    PL09_ID Gene    PL09_REL    Gene    PL10_ID Gene    PL10_REL
0   ENSG00000000003 0   ENSG00000000003 1   ENSG00000000003 2   ENSG00000000003 16  ENSG00000000003 29  ... ENSG00000000003 2   ENSG00000000003 9   ENSG00000000003 1   ENSG00000000003 1   ENSG00000000003 4
5 rows × 100 columns

当我试图删除重复的列时, 它抛出以下错误

    Columns_dup_droped =combined.drop_duplicates(cols=['Gene'])
    pandas/hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_labels (pandas/hashtable.c:13820)()

ValueError: Buffer has the wrong number of dimensions (expected 1, got 2)

最后,每个文件都需要这样的东西,例如

==> PE07_ID.count <==
ENSG00000000003 0
ENSG00000000005 0
ENSG00000000419 586
ENSG00000000457 97
ENSG00000000460 44
ENSG00000001167 978

应该是

Gene  PE07_ID.count
ENSG00000000003 0
ENSG00000000005 0
ENSG00000000419 586
ENSG00000000457 97
ENSG00000001167 978

另外,数据帧的尾部有以“\开始的行,我需要删除最后五行

我试过以下方法

combined.irow(slice(-5, None))

但这只是给他们最后一行..而我需要从整个数据帧中删除它们

所以对于所有50个数据帧。。你知道吗

非常感谢您的帮助。你知道吗


Tags: 文件pathinidhomeoscountfiles
2条回答

如注释中所述,您需要引用完整的路径名。你知道吗

如果您将路径更改为:

path       = '/user/home/files/' 

循环到:

for filename in os.listdir(path):
    name = os.path.splitext(filename)[0]
    file_names.append(name)
    df = pd.read_csv(path + filename, header=None)
    df.columns = ["Gene",filename]
    data_frames.append(df)

只要读入Dataframe的数据有两列,它就可以工作。你知道吗

所以只要一点点改变,我就能得到我需要的, 我在这里发布帮助我的东西。你知道吗

    path  = '/home/user/dir/out/' 

file_names = []
data_frames = []

for filename in os.listdir(path): 
    name = os.path.splitext(filename)[0] 
    file_names.append(name) 
    df = pd.read_csv(path + filename, header=None, sep='\t') 
    df = df.rename(columns={1: name, 0:'Gene'}).set_index('Gene')
    data_frames.append(df)
combined = pd.concat(data_frames, axis=1)

所以你可以看到,当我们把索引设为“Gene”时,同一列就不再重复了

相关问题 更多 >

    热门问题