如何从我的 Dataframe 中删除几行?
How can I drop several rows from my Dataframe?
我有一个数据框(称为 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()
您可以使用 isin
和否定 ~
符号:
dates=['2020-05-01', '2020-05-04']
my_df2 = mydf_1[~mydf_1['Date'].isin(dates)]
问题似乎出在您的逻辑运算符上。
你应该在这里使用 and
而不是 or
因为你必须 select 所有不是 2020-05-01
和 2020-05-04
.
的行
按位运算符不会短路,因此不会短路。
关于您的错误 AND 和 OR 的简短解释已由 kanmaytacker 解决。
遵循一些额外的建议:
在 pandas 中编制索引:
按标签 .loc
按索引 .iloc
By label 在没有 .loc
的情况下也可以工作,但速度较慢,因为它由链式操作组成,而不是由嵌套循环组成的单个内部操作(请参阅 here)。此外,使用 .loc
您可以一次在多个轴上 select。
# 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 也是如此,因此 pandas 也是如此。
(df['a']!=4) & (df['a']!=1)
>>>
0 False
1 False
2 True
Name: a, dtype: bool
我有一个数据框(称为 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()
您可以使用 isin
和否定 ~
符号:
dates=['2020-05-01', '2020-05-04']
my_df2 = mydf_1[~mydf_1['Date'].isin(dates)]
问题似乎出在您的逻辑运算符上。
你应该在这里使用 and
而不是 or
因为你必须 select 所有不是 2020-05-01
和 2020-05-04
.
按位运算符不会短路,因此不会短路。
关于您的错误 AND 和 OR 的简短解释已由 kanmaytacker 解决。 遵循一些额外的建议:
在 pandas 中编制索引:
按标签 .loc
按索引 .iloc
By label 在没有 .loc
的情况下也可以工作,但速度较慢,因为它由链式操作组成,而不是由嵌套循环组成的单个内部操作(请参阅 here)。此外,使用 .loc
您可以一次在多个轴上 select。
# 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 也是如此,因此 pandas 也是如此。
(df['a']!=4) & (df['a']!=1)
>>>
0 False
1 False
2 True
Name: a, dtype: bool