我有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个数据帧。。你知道吗
非常感谢您的帮助。你知道吗
如注释中所述,您需要引用完整的路径名。你知道吗
如果您将路径更改为:
循环到:
只要读入Dataframe的数据有两列,它就可以工作。你知道吗
所以只要一点点改变,我就能得到我需要的, 我在这里发布帮助我的东西。你知道吗
所以你可以看到,当我们把索引设为“Gene”时,同一列就不再重复了
相关问题 更多 >
编程相关推荐