Можете ли вы отфильтровать pandas фрейм данных, чтобы получить все строки, содержащие указанный шаблон c, как я бы сделал для регулярных выражений - PullRequest
0 голосов
/ 10 января 2020

Я новичок в python, и я пытаюсь написать конвейер для захвата всех идентификаторов, которые имеют "R" и "да" в одной строке.

У меня есть несколько файлов CSV, которые содержат следующий шаблон:

CSVFile1

"ID1","R","","","","","yes"
"ID2","S","","","","","yes"

CSVFile2

"ID1","animal","R","","","","","","","","yes"

CSVFile3

"ID1","animal","fish","S","","","","","","","yes"
"ID2","animal","dog","R","","","","","","","yes"

Используя регулярное выражение, я могу захватить все строки с помощью R и да:

input = open(sys.argv[1], 'r')

for line in input:
    if re.match(r'^(?=.*(\bR\b)+)(?=.*(\byes\b)+)', line) is not None:
        print (line)

Но если я преобразую его в pandas фрейм данных, есть ли способ, которым я мог бы захватить все строки, которые имеют R и да, без необходимости каждый раз указывать имена столбцов, как не все файлы? имеют одинаковое количество столбцов?

1 Ответ

2 голосов
/ 10 января 2020

Вы можете использовать логическое индексирование:

print(df[df.eq("R").any(1) & df.eq("yes").any(1)])

Выход (CSVFile1)

     0  1   2   3   4   5    6
0  ID1  R NaN NaN NaN NaN  yes

print(df1[df1.eq("R").any(1) & df1.eq("yes").any(1)])

Выход (CSVFile2)

    0       1    2  3   4   5   6   7   8   9    10
1  ID2  animal  dog  R NaN NaN NaN NaN NaN NaN  yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...