使用pandas在python中操纵数据

13 浏览
0 Comments

使用pandas在python中操纵数据

我有一个类似这个小例子的大文本文件:

小例子:

AAMP    chr2    219130810   219134433   transcript
AAMP    chr2    219132103   219134868   transcript
AARS    chr16   70286198    70323446    transcript
AARS    chr16   70287359    70292118    transcript
AARS    chr16   70286198    70323446    transcript
AAMP    chr2    219130810   219134433   transcript
AARS2   chr6    44267391    44281063    transcript

我想根据第2、3和4列(columns 2, 3 and 4)来对行进行分组。实际上,如果2行或更多行在第2、3和4列中的值相同,我只想保留其中一行。对于这个小例子,期望的输出应该是这样的:

AAMP    chr2    219130810   219134433   transcript
AAMP    chr2    219132103   219134868   transcript
AARS    chr16   70286198    70323446    transcript
AARS    chr16   70287359    70292118    transcript
AARS2   chr6    44267391    44281063    transcript

我试图使用pandaspython中完成这个任务。代码如下:

data = pd.read_csv("myfile")
df = pd.DataFrame(data)
res = df.groupby([0, 1, 2])
res.to_csv('outfile.txt', index=False)

但是它没有返回正确的结果。你知道如何修复它吗?

0
0 Comments

使用pandas库对数据进行操作的问题的出现原因是需要对给定的数据进行分组和去重处理。解决方法是使用pandas库中的groupby函数进行分组操作,并通过reset_index函数重新设置索引。

具体代码如下所示:

import pandas as pd
# 给定的数据
a='''AAMP chr2 219130810 219134433 transcript
AAMP chr2 219132103 219134868 transcript
AARS chr16 70286198 70323446 transcript
AARS chr16 70287359 70292118 transcript
AARS chr16 70286198 70323446 transcript
AAMP chr2 219130810 219134433 transcript
AARS2 chr6 44267391 44281063 transcript'''
# 将数据转换为DataFrame格式
df=pd.DataFrame([i.split(' ') for i in a.split('\n')])
# 使用groupby函数对数据进行分组,并取每组的第一个值
grouped_df = df.groupby([0,1,2]).first()
# 重新设置索引
output_df = grouped_df.reset_index()
# 输出结果
print(output_df)

输出结果如下所示:

       0     1           2           3           4
0   AAMP  chr2   219130810   219134433  transcript
1   AAMP  chr2   219132103   219134868  transcript
2   AARS  chr16   70286198    70323446  transcript
3   AARS  chr16   70287359    70292118  transcript
4  AARS2   chr6   44267391    44281063  transcript

这样就实现了对给定数据的分组和去重处理。

0