#python #dataframe #drop
#python #фрейм данных #удаление
Вопрос:
У меня есть фрейм данных (называемый my_df 1), и я хочу удалить несколько строк на основе определенных дат. Как я могу создать новый фрейм данных (my_df 2) без дат «2020-05-01» и «2020-05-04»?
Я попробовал следующее, которое не сработало, как вы можете видеть ниже:
my_df2 = mydf_1[(mydf_1['Date'] != '2020-05-01') | (mydf_1['Date'] != '2020-05-04')]
my_df2.head()
Комментарии:
1.
mydf_1.loc[your boolean_stuff]
подойдет.mydf_1[...]
обращается к столбцам,mydf_1.loc[...]
обращается к строкам. Кроме того, вы захотите соединить свои логические запросы с помощью амперсандаamp;
вместо канала|
. Канал эквивалентенor
, и каждая дата не будет первым или четвертым мая2. Что я должен ввести в [ваш boolean_stuff]? Я попробовал mydf_1.loc[‘Date’ = ‘2020-05-01’]
3.
(mydf_1['Date'] != '2020-05-01') amp; (mydf_1['Date'] != '2020-05-04')
Ответ №1:
Проблема, похоже, в вашем логическом операторе. Вы должны использовать and
здесь вместо or
, поскольку вам нужно выбрать все строки, которые не являются 2020-05-01
и 2020-05-04
.
Побитовые операторы не будут закорачиваться, и, следовательно, результат.
Ответ №2:
Вы можете использовать isin
со знаком отрицания ~
:
dates=['2020-05-01', '2020-05-04']
my_df2 = mydf_1[~mydf_1['Date'].isin(dates)]
Ответ №3:
Краткое объяснение вашей ошибки И и ИЛИ было адресовано kanmaytacker. Следуя нескольким дополнительным рекомендациям:
Индексирование в pandas:
По метке .loc
По индексу .iloc
By label также работает без .loc
, но это медленнее, поскольку оно состоит из последовательных операций вместо одной внутренней операции, состоящей из вложенных циклов (см. Здесь). Кроме того, с .loc
вы можете выбирать более чем по одной оси одновременно.
# example with rows. Same logic for columns or additional axis.
df.loc[(df['a']!=4) amp; (df['a']!=1),:] # ".loc" is the only addition
>>>
a b c
2 0 4 6
Ваш индекс является логическим набором. Это верно для numpy и, как следствие, для pandas тоже.
(df['a']!=4) amp; (df['a']!=1)
>>>
0 False
1 False
2 True
Name: a, dtype: bool