Python Pandas Фреймы данных: невозможно удалить строки, всегда удалять весь набор данных при аварии - PullRequest
0 голосов
/ 03 мая 2020

Более двух часов я не смог решить эту проблему. Кажется, я нашел все варианты решения, но ни одно из них, похоже, не работает. Это может быть потому, что я бегаю по четыре часа сна в день, хотя. В любом случае, я пытаюсь условно удалить строки из pandas кадра данных. Фрейм данных взят из трендового видео на YouTube. Один из столбцов - «category_id».

Я пытаюсь удалить все категории, у которых нет номеров 25 или 43. Каждый раз, когда я делаю это, весь набор данных уменьшается до 0 строк. Я знаю, что вы думаете, существуют ли строки, которые даже имеют категории 25 или 43? ДА! Они делают!

Решение, которое я действительно думал, будет работать следующим образом:

df.drop(df[df.category_id != 25].index, inplace=True)
df.drop(df[df.category_id != 43].index, inplace=True)

Но затем я проверяю этот фрейм данных, и он пуст. Как это исправить?

Ответы [ 2 ]

1 голос
/ 03 мая 2020
df = pd.DataFrame( {'category_id': [12, 14, 25, 7, 29, 43, 22, 95]} )
df
        category_id
   0    12
   1    14
   2    25
   3    7
   4    29
   5    43
   6    22
   7    95

   df.drop( list(df[ ~ df['category_id'].isin([25, 43])].index), \
                 inplace = True, axis = 0)
   df

   category_id
   2    25
   4    43
0 голосов
/ 03 мая 2020

В настоящее время вы удаляете все category_ids, которые не равны 43, а затем удаляете все category_ids, которые не равны 25. Оставляя вас с пустым фреймом данных.

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

indexes = df[df['category_id'] != 25 & df['category_id'] != 40].index
df = df.drop(indexes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...