Собственный метод проверки вхождения элемента в pandas .core.series.Series? - PullRequest
0 голосов
/ 19 февраля 2020

Я пишу небольшую функцию для выбора строк из файла .xlsx, считывая его как pandas dataframe и просматривая его с помощью метода .iterrows (). Каждая строка имеет тип pandas.core.series.Series. Теперь я хочу выполнить серию булевых проверок, чтобы увидеть, есть ли в этом элементе (1002 *) определенные элементы (совпадающая строка, определенное числовое значение и т. Д. c.). Как я обычно делаю это в простом встроенном синтаксисе, просто спрашиваю: if item in container: do X, но я обнаружил, что это работает только на list типах, что я понял, преобразовав строку в список python, используя список ( ) функция. Поэтому я хотел знать, есть ли для этого собственный метод / функция pandas, или я должен просто использовать свое текущее исправление (мое текущее исправление находит длину двух объектов set (), что, как я полагал, будет много быстрее, чем преобразование в списки).

Это важно для меня, так как мне хотелось бы заранее знать, как оптимизировать работу для предварительного исполнения. В последнее время я сталкиваюсь с множеством проблем из-за плохой производительности, хотя у меня довольно сильная система (CPU: Ryzen 7 3700X). Однажды мне может понадобиться l oop через несколько гигантов c .csv, выполняющих те же самые операции, и если я не согласен на использование JIT-компилятора (который я не знаю в целом), это может занять много лет. Итак: есть ли собственный метод pandas, чтобы сделать это, и будет ли он преформироваться лучше, чем мое текущее решение?

Вот выдержка из .xlsx (возможно, больше, чем необходимо):

solute       qqType   waterModel    chargeMethod    qmTheory    qmBasis    NumericalValues
Ammonia      fixed    SPCE          mbis            B3LYP       cc-pVTZ    1
Ammonia      OTFP     SPCE          mbis            B3LYP       cc-pVTZ    1
Ammonia      fixed    SPCE          mbis            MP2         cc-pVTZ    1
Ammonia      OTFP     SPCE          mbis            MP2         cc-pVTZ    1
Ammonia      fixed    SPCE          resp            B3LYP       cc-pVTZ    1
Ammonia      OTFP     SPCE          resp            B3LYP       cc-pVTZ    1
Ammonia      fixed    SPCE          resp            HF          6-31G*     1
Ammonia      OTFP     SPCE          resp            HF          6-31G*     1
Ammonia      fixed    SPCE          bcc             AM1         -          1
Ammonia      OTFP     SPCE          bcc             AM1         -          1
Ammonia      fixed    TIP3P         resp            HF          6-31G*     1
Ammonia      OTFP     TIP3P         resp            HF          6-31G*     1
Ammonia      fixed    TIP3P         resp            B3LYP       cc-pVTZ    1
Ammonia      OTFP     TIP3P         resp            B3LYP       cc-pVTZ    1
Ammonia      fixed    TIP3P         bcc             AM1         -          1
Ammonia      OTFP     TIP3P         bcc             AM1         -          1
                                                                           1
ACETAMIDE    fixed    SPCE          mbis            B3LYP       cc-pVTZ    1
ACETAMIDE    OTFP     SPCE          mbis            B3LYP       cc-pVTZ    1
ACETAMIDE    fixed    SPCE          mbis            MP2         cc-pVTZ    1
ACETAMIDE    OTFP     SPCE          mbis            MP2         cc-pVTZ    1
ACETAMIDE    fixed    SPCE          resp            B3LYP       cc-pVTZ    1
ACETAMIDE    OTFP     SPCE          resp            B3LYP       cc-pVTZ    1
ACETAMIDE    fixed    SPCE          resp            HF          6-31G*     1
ACETAMIDE    OTFP     SPCE          resp            HF          6-31G*     1
ACETAMIDE    fixed    SPCE          bcc             AM1         -          1
ACETAMIDE    OTFP     SPCE          bcc             AM1         -          1
ACETAMIDE    fixed    TIP3P         resp            HF          6-31G*     1
ACETAMIDE    OTFP     TIP3P         resp            HF          6-31G*     1
ACETAMIDE    fixed    TIP3P         resp            B3LYP       cc-pVTZ    1
ACETAMIDE    OTFP     TIP3P         resp            B3LYP       cc-pVTZ    1
ACETAMIDE    fixed    TIP3P         bcc             AM1         -          1
ACETAMIDE    OTFP     TIP3P         bcc             AM1         -          1

А вот мой код:

import pandas as pd

df = pd.read_excel('SI.xlsx')

def Extractor(dataframe,*match_criteria):

    for index,row in dataframe.iterrows():
        if len(set(row) & set(match_criteria)) == len(match_criteria):
            yield row

for occurence in Extractor(df,'OTFP','resp'):
    print(occurence)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...