gpt4 book ai didi

python - 如何从 Dataframe 中删除重复的列和最后 5 行

转载 作者:太空宇宙 更新时间:2023-11-04 05:33:19 25 4
gpt4 key购买 nike

我有 50 个 DataFrame ,它是制表符分隔的并且有两列。我需要向这些文件中添加列名。

这是文件的示例,

    ==> 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

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

这是我到目前为止尝试过的,

首先我调用了所有文件,

 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 个数据帧的 files_txt 看起来像这样

['/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

此外,Dataframe 的尾部有以“__”开头的行,我需要删除最后五行,

我试过以下,

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

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

所以对于所有 50 个数据帧..

非常感谢任何帮助。

最佳答案

如评论中所述,您需要引用完整路径名。

如果您将路径更改为:

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 的数据有两列,它应该可以工作。

关于python - 如何从 Dataframe 中删除重复的列和最后 5 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36404374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com