pandas:按分隔符拆分一列,并获取唯一值

5
我将从R翻译一些代码到Python以提高性能,但我对pandas库不太熟悉。
我有一个CSV文件,看起来像这样:
O43657,GO:0005737
A0A087WYV6,GO:0005737
A0A087WZU5,GO:0005737
Q8IZE3,GO:0015630 GO:0005654 GO:0005794
X6RHX1,GO:0015630 GO:0005654 GO:0005794
Q9NSG2,GO:0005654 GO:0005739

我想要将第二列根据分隔符(这里是空格)拆分,并获取该列中的唯一值。在这种情况下,代码应返回[GO:0005737, GO:0015630, GO:0005654 GO:0005794, GO:0005739]

在R中,我会使用以下代码实现:

df <- read.csv("data.csv")
unique <- unique(unlist(strsplit(df[,2], " ")))

在Python中,我使用pandas编写了以下代码:

df = pd.read_csv("data.csv")
split = df.iloc[:, 1].str.split(' ')
unique = pd.unique(split)

但是这会产生以下错误:
TypeError: unhashable type: 'list'

如何在Python中按分隔符将CSV文件的一列拆分后获取唯一值?

1个回答

5

设置

from io import StringIO
import pandas as pd

txt = """O43657,GO:0005737
A0A087WYV6,GO:0005737
A0A087WZU5,GO:0005737
Q8IZE3,GO:0015630 GO:0005654 GO:0005794
X6RHX1,GO:0015630 GO:0005654 GO:0005794
Q9NSG2,GO:0005654 GO:0005739"""

s = pd.read_csv(StringIO(txt), header=None, squeeze=True, index_col=0)

解决方案

pd.unique(s.str.split(expand=True).stack())

array(['GO:0005737', 'GO:0015630', 'GO:0005654', 'GO:0005794', 'GO:0005739'], dtype=object)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接