2016-12-16 16 views
1

パフォーマンスを向上させるために、いくつかのコードをRからPythonに翻訳していますが、私はpandasライブラリに詳しくはありません。私はこのコラムで一意の値を区切り文字(ここでは、スペース)上の第2の列を分割し、取得したいと思いpandas:デリミタの列を分割して一意の値を取得

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 

私はこのようになりますCSVファイルを持っています。この場合、コードは [GO:0005737, GO:0015630, GO:0005654 GO:0005794, GO:0005739]を返す必要があります。 Rで

、私は次のコード使用してこれを実行します:Pythonで

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

を、私はパンダを使用して、次のコードを持っている:

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

しかし、これは次のエラーを生成します。

TypeError: unhashable type: 'list' 

Pythonでデリミタを分割した後、CSVファイルの列に一意の値を取得するにはどうすればよいですか?

答えて

1

セットアップ

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) 
関連する問題