2016-12-04 25 views
0

如果我有以下csv文件test.csv:蟒使用測試,如果一個數據幀熊貓的值是由另一個列表示一組成員

C01,45,A,R 
C02,123,H,I 

在那裏我有限定套RI作爲

R=set(['R','E','D','N','P','H','K']) 
I=set(['I','H','G','F','A','C','L','M','P','Q','S','T','V','W','Y']) 

我希望能夠以測試是否串A是集R(這是假的)的一員,如果串H是集I(這是真的)中的一員。我試圖與下面的腳本來做到這一點:

#!/usr/bin/env python 
import pandas as pd 

I=set(['I','H','G','F','A','C','L','M','P','Q','S','T','V','W','Y']) 
R=set(['R','E','D','N','P','H','K']) 

with open(test.csv) as f: 
    table = pd.read_table(f, sep=',', header=None, lineterminator='\n') 
table[table.columns[3]].astype(str).isin(table[table.columns[4]].astype(str)) 

即我試圖做的A in R同等或相當table.columns[3] in table.columns[4]和數據的每一行返回TRUE或FALSE。

唯一的問題是使用最後一行兩行返回TRUE。如果我改變最後的行

table[table.columns[3]].astype(str).isin(R) 

然後我得到

0 FALSE 
1 TRUE 

這是正確的。看來我在做.isin(table[table.columns[3]].astype(str))時沒有正確引用集名稱

有什麼想法嗎?

+0

我很困惑,你正在試圖檢查。你能改說嗎? –

+1

你是否想使用文件中的字母'R'作爲設置名稱?如果是這樣,你最好的選擇是使用字典。 – ayhan

+0

基本上A不在集合R中,但H在集合I中。我想打印比較列3和4的成員結果 – brucezepplin

回答

1

開始下列要求:

In [21]: df 
Out[21]: 
    0 1 2 3 
0 C01 45 A R 
1 C02 123 H I 

In [22]: R=set(['R','E','D','N','P','H','K']) 
    ...: I=set(['I','H','G','F','A','C','L','M','P','Q','S','T','V','W','Y']) 
    ...: 

你可以做這樣的事情:

In [23]: sets = {"R":R,"I":I} 

In [24]: df.apply(lambda S: S[2] in sets[S[3]],axis=1) 
Out[24]: 
0 False 
1  True 
dtype: bool 

公平的警告,.apply是緩慢的,並且不具有較大規模的數據非常好。這是爲了方便和最後的手段。

+0

謝謝 - 這將如何實現使用字典(如果我不應該使用數據框?) – brucezepplin

+0

@brucezepplin我不能沒有理解你想要完成的是什麼。 –

相關問題