Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于“从数据帧中删除行”;不在「;条件_Python_Pandas - Fatal编程技术网

Python 基于“从数据帧中删除行”;不在「;条件

Python 基于“从数据帧中删除行”;不在「;条件,python,pandas,Python,Pandas,当日期列的值在日期列表中时,我想从数据框中删除行。以下代码不起作用: a=['2015-01-01' , '2015-02-01'] df=df[df.datecolumn not in a] 我得到以下错误: ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all() 您可以使用: 虽然错误消息表明可以使用all()或any(),但它们仅在您希望将结果减少为单个布尔值时才有用。然而,这并不是您现在想要做的,这是根据外部列表

当日期列的值在日期列表中时,我想从数据框中删除行。以下代码不起作用:

a=['2015-01-01' , '2015-02-01']

df=df[df.datecolumn not in a]
我得到以下错误:

ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()

您可以使用:

虽然错误消息表明可以使用
all()
any()
,但它们仅在您希望将结果减少为单个布尔值时才有用。然而,这并不是您现在想要做的,这是根据外部列表测试序列中每个值的成员资格,并保持结果不变(即,一个布尔序列,然后将用于切片原始数据帧)

有关这方面的更多信息,请参阅。

您可以使用

pandaes.Dateframe.isin
将根据每个元素是否在列表
a
中返回布尔值。然后用
~
将其反转,将
True
转换为
False
,反之亦然

import pandas as pd

a = ['2015-01-01' , '2015-02-01']

df = pd.DataFrame(data={'date':['2015-01-01' , '2015-02-01', '2015-03-01' , '2015-04-01', '2015-05-01' , '2015-06-01']})

print(df)
#         date
#0  2015-01-01
#1  2015-02-01
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01

df = df[~df['date'].isin(a)]

print(df)
#         date
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01

你可能是说,不是
DataFrame.isin
。您正在比较的是一列,而不是整个df。我尝试此操作时出错
df=df[~df.isin(a)]
SystemError:返回了一个带有错误集的结果
import pandas as pd

a = ['2015-01-01' , '2015-02-01']

df = pd.DataFrame(data={'date':['2015-01-01' , '2015-02-01', '2015-03-01' , '2015-04-01', '2015-05-01' , '2015-06-01']})

print(df)
#         date
#0  2015-01-01
#1  2015-02-01
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01

df = df[~df['date'].isin(a)]

print(df)
#         date
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01