1

我有一个数据框(称为 my_df1)并希望根据某些日期删除几行。如何创建没有日期“2020-05-01”和“2020-05-04”的新数据框(my_df2)?

我尝试了以下不起作用的方法,如下所示:

my_df2 = mydf_1[(mydf_1['Date'] != '2020-05-01') | (mydf_1['Date'] != '2020-05-04')] 
my_df2.head()

在此处输入图像描述

4

3 回答 3

2

问题似乎出在您的逻辑运算符上。您应该在and此处使用,而不是or因为您必须选择所有非2020-05-01和的行2020-05-04

位运算符不会短路,因此不会短路。

于 2020-09-04T08:37:56.283 回答
1

您可以使用isin否定~符号:

dates=['2020-05-01', '2020-05-04']
my_df2 = mydf_1[~mydf_1['Date'].isin(dates)] 
于 2020-09-04T08:30:39.290 回答
1

kanmaytacker 解决了关于您的错误ANDOR的简短解释。以下是一些额外的建议:

大熊猫索引:

按标签.loc
按索引.iloc

By label 也可以不使用.loc,但速度较慢,因为它由链式操作组成,而不是由嵌套循环组成的单个内部操作(参见此处)。此外,.loc您可以一次选择多个轴。

# example with rows. Same logic for columns or additional axis.
df.loc[(df['a']!=4) & (df['a']!=1),:] # ".loc" is the only addition
>>>
   a  b  c
2  0  4  6

您的索引是一个布尔集。这对于numpy是正确的,并且作为 consecence,pandas也是如此。

(df['a']!=4) & (df['a']!=1)
>>>
0    False
1    False
2     True
Name: a, dtype: bool

于 2020-09-04T09:41:02.047 回答