Рекомендованное решение является наиболее эффективным, которое в данном случае является первым.
df = df[df['A'] >= 0]
Во втором решении
selRows = df[df['A'] < 0].index
df = df.drop(selRows, axis=0)
вы повторяете процесс нарезки.Но давайте разберем его на части, чтобы понять, почему.
Когда вы пишете
df['A'] >= 0
, вы создаете маску, логическую серию с записью для каждого индекса df, значение которой равноВерно или неверно в соответствии с условием (в этом случае, если значение столбца «А» для данного индекса больше или равно 0).
Когда вы пишете
df[df['A'] >= 0]
вы получаете доступ к строкам, для которых ваша маска (df ['A']> = 0) имеет значение True.Это метод нарезки, поддерживаемый Pandas, который позволяет вам выбирать определенные строки, передавая логическую серию, и возвращает новый DataFrame только с записями, для которых эта серия была истинной.
Наконец, когда вы пишете это
selRows = df[df['A'] < 0].index
df = df.drop(selRows, axis=0)
вы повторяете процесс, потому что
df[df['A'] < 0]
уже нарезает ваш DataFrame (в данном случае для строк, которые вы хотите drop ).Затем вы получаете эти индексы, возвращаетесь к исходному DataFrame и явно отбрасываете их.Нет необходимости в этом, вы уже нарезали DataFrame на первом шаге.