Python 熊猫:在分隔符上拆分列,并获取唯一值

Python 熊猫:在分隔符上拆分列,并获取唯一值,python,pandas,Python,Pandas,我正在将一些代码从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 我想拆分分隔符(这里是空格)上的第二列,并

我正在将一些代码从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], " ")))
但这会产生以下错误:

TypeError: unhashable type: 'list'
在python中使用分隔符进行拆分后,如何获得CSV文件列中的唯一值

设置

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)
解决方案

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)

这个解决方案救了我一天!