Поиск в списке списков - PullRequest
0 голосов
/ 17 ноября 2018

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

Мне нужно иметь возможность вводить один или несколько идентификаторов в поиске.Я попробовал приведенный ниже код, но в конце этого вопроса я получил сообщение об ошибке.

buyers[buyers['customer_list'].str.contains('48184' )]
buyers[buyers['customer_list'].str.contains('48184', '55684')]

Данные

df = pd.DataFrame({'A':[[48184, 48184, 64970, 64970], [55684, 72990, 72990, 85673], [55684, 72990, 72990, 85673], [64247, 60131, 60131, 60131], [64544, 64544, 64544, 64544]]})

Ошибка

KeyError                                  Traceback (most recent call last)
<ipython-input-42-3229146c6a64> in <module>()
----> 1 buyers[buyers['customer_list2'].str.contains( '48184' )]

/opt/conda/lib/python3.6/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2680         if isinstance(key, (Series, np.ndarray, Index, list)):
   2681             # either boolean or fancy integer index
-> 2682             return self._getitem_array(key)
   2683         elif isinstance(key, DataFrame):
   2684             return self._getitem_frame(key)

/opt/conda/lib/python3.6/site-packages/pandas/core/frame.py in _getitem_array(self, key)
   2724             return self._take(indexer, axis=0)
   2725         else:
-> 2726             indexer = self.loc._convert_to_indexer(key, axis=1)
   2727             return self._take(indexer, axis=1)
   2728 

/opt/conda/lib/python3.6/site-packages/pandas/core/indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
   1325                 if mask.any():
   1326                     raise KeyError('{mask} not in index'
-> 1327                                    .format(mask=objarr[mask]))
   1328 
   1329                 return com._values_from_object(indexer)

KeyError: '[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan nan nan nan nan] not in index'

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Использование конструктора датафреймов и isin + any

pd.DataFrame(df.A.tolist()).isin([48184,55684]).any(1)
Out[29]: 
0     True
1     True
2     True
3    False
4    False
dtype: bool
0 голосов
/ 17 ноября 2018

Вы можете использовать apply с лямбда-функцией:

searchValue = input('ID Search: ')
mask = df['A'].apply(lambda x: int(searchValue) in x)
print(df[mask])

ID Search:  72990
                              A
1  [55684, 72990, 72990, 85673]
2  [55684, 72990, 72990, 85673]

, если вы хотите найти несколько значений из ввода:

searchValue = input('ID Search: ') # input numbers
nums = [int(n) for n in searchValue.split(',')] # list comprehension to int n for n in the input values separated by comma
mask = df['A'].apply(lambda x: any(elem in x for elem in nums)) #  create a mask for any elem in nums and in x which is each row
print(df[mask])

ID Search:  72990,48184
                              A
0  [48184, 48184, 64970, 64970]
1  [55684, 72990, 72990, 85673]
2  [55684, 72990, 72990, 85673]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...