Находится в столбце со специальными символами в python

#python #pandas

Вопрос:

У меня есть фрейм данных, такой как

 COL1 
jcf7180001991334_2-HSPs_ __SP_1
jcf7180001991334:23992-26263( ):SP_2
jcf7180001988059:2889-4542(-):SP_3
 

и список :

 the_list['jcf7180001991334_2-HSPs_ __SP_1','not_in_tab1','jcf7180001991334:23992-26263( ):SP_2','not_intab2','not_intab3','jcf7180001988059:2889-4542(-):SP_3'] 
 

и повторяя этот список, например :

 for element in the_list:
 if element in df['COL1']:
  print(element, " in df")
 else:
  print(element, " not in df")
 

Затем я должен получить следующий результат :

 jcf7180001991334_2-HSPs_ __SP_1 in df 
not_in_tab1 not in df
jcf7180001991334:23992-26263( ):SP_2 in df
not_intab2 not in df
not_intab3 not in df
jcf7180001988059:2889-4542(-):SP_3 in df
 

Но вместо этого я не могу найти ни одного из них в df, и я получаю :

 jcf7180001991334_2-HSPs_ __SP_1 not in df 
not_in_tab1 not in df
jcf7180001991334:23992-26263( ):SP_2 not in df
not_intab2 not in df
not_intab3 not in df
jcf7180001988059:2889-4542(-):SP_3 not in df
 

Я предполагаю, что это из-за специальных символов внутри элемента, таких как parentheses и или - ? Кто-нибудь знает, как с этим справиться ?

Ответ №1:

По умолчанию in проверяет, находится ли значение в индексе.

Затем вы можете посмотреть значения следующим образом df['COL1'].values

 import pandas as pd
data = {
  "COL1": ['jcf7180001991334_2-HSPs_ __SP_1', 'jcf7180001991334:23992-26263( ):SP_2', 'jcf7180001988059:2889-4542(-):SP_3']}

df = pd.DataFrame(data)

the_list=['jcf7180001991334_2-HSPs_ __SP_1', 'not_in_tab1', 'jcf7180001991334:23992-26263( ):SP_2', 'not_intab2', 'not_intab3','jcf7180001988059:2889-4542(-):SP_3'] 

for element in the_list:

 if element in df['COL1'].values: # Here You should look in The values
  print(element, " in df")
 else:
  print(element, " not in df")
 

[Вывод]

 jcf7180001991334_2-HSPs_ __SP_1  in df
not_in_tab1  not in df
jcf7180001991334:23992-26263( ):SP_2  in df
not_intab2  not in df
not_intab3  not in df
jcf7180001988059:2889-4542(-):SP_3  in df
 

Комментарии:

1. большое спасибо, это решило проблему

Ответ №2:

Дайте этому попробовать: ["in df" if x in df['COL1'].values else "not in df" for x in the_list]