Как получить индекс элемента в CSV, чья запись совпадает с записью в текстовом файле - PullRequest
1 голос
/ 04 ноября 2019

У меня есть текстовый файл abc.txt , состоящий из идентификаторов:

301KG0KXAFQBZD5C6JXD5Y3V32D2HR
301KG0KXAFQBZD5C6JXD5Y3V32DH26
302OLP89E2C9N8P0X6CR0PPD2YZCAY
302U8RURK26C60PPXRC1CNX2MCEVN0
304QEQWK0SPEVKOLV9OP6J7HIQ70OT
306996CF7ZPUJFKUNNN3E4QSGJU1BT
306996CF7ZPUJFKUNNN3E4QSGJV1BU
306W7JMRZ13CUF4FM8WITED0UP08BK
307FVKVSZUKO92ENXOUP70BZ9DE74R
3087LXLJ7PLKP7BSW65ZJPY3QPFF0L
3087LXLJ7PLKP7BSW65ZJPY3QPHF0N

and so on

Все, что мне нужно сделать, это:

для каждой строки в abc.txt , найдите и верните индексный номер xyz.csv , столбец которого HITID содержит эту строку и присвойте ее индексной переменной.

Моя попытка:

clm = pd.read_csv('xyz.csv')

f = open('abc.txt', 'rb')

for entry in f:
    # if clm['HITId'].str.contains(entry).any()

    index =clm[clm['HITId']==entry].index.item()
    print(index)

Получение сообщения об ошибке:

  File "approve_reject_hits_fingerD.py", line 89, in <module>
    index =clm[clm['HITId']==entry].index.item()
  File "/Users/AjayB/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/pandas/core/base.py", line 716, in item
    return self.values.item()
ValueError: can only convert an array of size 1 to a Python scalar

и когда я использую строку:

index =clm[clm['HITId']==entry].index[0]

Затем я придумываю следующее:

  File "approve_reject_hits_fingerD.py", line 89, in <module>
    index =clm[clm['HITId']==entry].index[0]
  File "/Users/AjayB/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 3958, in __getitem__
    return getitem(key)
IndexError: index 0 is out of bounds for axis 0 with size 0

Новичок в python и, в частности, в пандах, поэтому попробовал эти попытки, ссылаясь на:

Поиск индекса элемента в пандах Серия

Получитьиндекс строки кадра данных pandas в виде целого числа

Как решить эту проблему синтаксически?

1 Ответ

1 голос
/ 04 ноября 2019

Проблема не соответствует ни одному значению, поэтому ошибка. Возможное решение - использовать next с iter для возврата первого совпавшего значения, если существует другое значение по умолчанию, здесь no match:

clm = pd.read_csv('xyz.csv')

f = open('abc.txt', 'rb')

for entry in f:

    index =clm[clm['HITId']==entry].index
    print(index)
    print (next(iter(index), 'no match'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...