2016-09-22 2 views
1

Я создал кадр данных, прочитав текстовый файл. Мне интересно узнать, существует ли несколько значений в определенном столбце, и если они это сделают, я хочу напечатать всю строку.Поиск Pandas dataFrame

Это мой входной файл (analyte_map.txt):

Analyte_id mass Intensity 
A34579  101.2 786788 
B12345  99.2  878787 
B943470  103.89 986443 
C12345  11.2  101 

Это мой код:

import pandas as pd 
map_file="analyte_map.txt" 
array=['A34579','B943470','D583730'] 
analyte_df=pd.read_table(map_file,sep="\t") 
for value in array: 
    if analyte_df.lookup([value],['Analyte_id']): 
     print '%s\t%s'%(analyte_df['mass'],analyte_df['Intensity']) 

ответ

5

Вы можете использовать boolean indexing с isin:

array=['A34579','B943470','D583730'] 
print (df[df.analyte_id.isin(array)]) 
    analyte_id mass Intensity 
0  A34579 101.20  786788 
2 B943470 103.89  986443 

Кроме того, если необходимо использовать только несколько столбцов ix:

array=['A34579','B943470','D583730'] 
print (df.ix[df.analyte_id.isin(array), ['mass','Intensity']]) 
    mass Intensity 
0 101.20  786788 
2 103.89  986443 
+0

Спасибо за помощь. Есть ли способ поиска одного значения за раз в кадре данных, а не для всего списка? – Mdhale

+0

Рад может вам помочь! Как вы думаете, '(df [df.analyte_id == 'A34579'])'? – jezrael

+0

Да, я пытаюсь, если df [df.analyte_id == 'A34579']: print df.Intensity – Mdhale

2

используя .query() метод:

In [9]: look_up=['A34579','B943470','D583730'] 

In [10]: df.query('Analyte_id in @look_up') 
Out[10]: 
    Analyte_id mass Intensity 
0  A34579 101.20  786788 
2 B943470 103.89  986443 

In [11]: df.query('Analyte_id in @look_up')[['mass','Intensity']] 
Out[11]: 
    mass Intensity 
0 101.20  786788 
2 103.89  986443