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