Python 熊猫:在分隔符上拆分列,并获取唯一值
我正在将一些代码从R翻译成python以提高性能,但我对pandas库不是很熟悉 我有一个CSV文件,如下所示: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 我想拆分分隔符(这里是空格)上的第二列,并
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)
这个解决方案救了我一天!