Как удалить много строк из фрейма данных, используя циклы for, которые перебирают значения, которые необходимо удалить? - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь удалить более нескольких миллионов строк по его имени, что составляет более 1000 уникальных значений.

Существует основной фрейм данных (df_summary) и еще один фрейм данных, который содержит имена строк, которые должны быть удалены из основного фрейма данных.

Удаление нескольких столбцов - не проблема, но числоиз уникальных значений необходимо удалить, просто слишком много, чтобы выполнить вручную. Поэтому я пытаюсь пройтись по нему.

https://imgur.com/a/vvQpepe "общий вид двух фреймов данных, многие столбцы следуют за столбцом"

. Вот что я пробовал:

from pandas import read_csv
import pandas as pd

df_summary = read_csv ('path.csv', sep=',')
rows_to_remove = read_csv ('path.csv', sep=',')

i = 0
for i in range len(rows_to_remove):
    item = df.loc[i].item()
    df_summary = df_summary.drop(df_summary['contract'] == f"{item}", axis=0)

Ответы [ 3 ]

1 голос
/ 25 октября 2019

Вы можете использовать isin для создания маски, а затем использовать эту маску для фильтрации вашего кадра данных (чтобы иметь только те значения или иметь значения, отличные от этих значений)

m = df_summary['contract'].isin(rows_to_remove['contract'])
df_summary [~m]
1 голос
/ 25 октября 2019

Если вы выполняете итерацию по строкам, это будет не так эффективно, как если бы вы использовали возможности индексации для панелей данных pandas. Я не совсем понимаю разницу между df_summary и rows_to_remove в вашем примере, так как они оба загружают один и тот же CSV. Но давайте представим, что у вас есть все значения df_summary['contract'], которые вы хотите удалить в списке с именем values_to_remove. Тогда вы можете сделать что-то вроде этого:

# values_to_remove = the list of values you are trying to remove
df_cleaned = df_summary.loc[ ~df_summary['contract'].isin(values_to_remove) ]
0 голосов
/ 25 октября 2019

Как общее практическое правило, большую часть времени, когда вы зацикливаетесь на объекте панд, вам не следует этого делать, потому что есть лучший способ сделать это.

Попробуйте это:

df_summary.drop(rows_to_remove.values, inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...