Python 列出要检查的真实值

Python 列出要检查的真实值,python,pandas,Python,Pandas,我有一个数据框和一个列表。数据帧中与列表中的项不匹配的每个项都应设置为“无”。我写了一个列表理解,它应该检查列表中的项目是否为True,在本例中,应该将数据帧的项目设置为None。 有人能解释我为什么会出错吗。我尝试了ValueError中推荐的方法,但都不起作用 我的代码: abc = ['A', 'B', 'C'] l = ['A', 'B', 'None', '5-20', 'C', '200-500', 'D', '1000', 'A'] l = pd.DataFrame(l) [No

我有一个数据框和一个列表。数据帧中与列表中的项不匹配的每个项都应设置为“无”。我写了一个列表理解,它应该检查列表中的项目是否为True,在本例中,应该将数据帧的项目设置为None。 有人能解释我为什么会出错吗。我尝试了ValueError中推荐的方法,但都不起作用

我的代码:

abc = ['A', 'B', 'C']
l = ['A', 'B', 'None', '5-20', 'C', '200-500', 'D', '1000', 'A']
l = pd.DataFrame(l)

[None for i in l if ~l[i].isin(abc) == True]
       
print(l)
输出:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all() 
预期结果:

      0
0     A
1     B
2  None
3  None
4     C
5  None
6  None
7  None
8     A
如果不匹配,则用于设置为
None

a = l.where(l.isin(abc), None)
       
print(a)
      0
0     A
1     B
2  None
3  None
4     C
5  None
6  None
7  None
8     A
可以与布尔索引一起使用

l[~l.isin(abc)] = None
l
      0
0     A
1     B
2  None
3  None
4     C
5  None
6  None
7  None
8     A

isin
将返回
True
,如果数据帧
l
的每一行的项都按给定顺序包含
abc

l.isin(abc)
       0
0   True
1   True
2  False
3  False
4   True
5  False
6  False
7  False
8   True
在这里,我们要设置
None
,其中值为
False
(其中值与列表不匹配),因此我们将使用位(
~
)对其进行反转,以便稍后可以将其用于布尔索引

~l.isin(abc)
       0
0  False
1  False
2   True
3   True
4  False
5   True
6   True
7   True
8  False
然后使用

您可以使用如下方法:

>>> print(l.mask(~l.isin(abc), None))
      0
0     A
1     B
2  None
3  None
4     C
5  None
6  None
7  None
8     A

你能公布预期结果吗?@alec_djinn编辑了很多感谢你的回答,这对我最有效。你能给我一个简短的解释吗?这种索引方式只适用于布尔值吗?@Changer我更新了我的答案,并做了一些解释。希望有帮助。
>>> print(l.mask(~l.isin(abc), None))
      0
0     A
1     B
2  None
3  None
4     C
5  None
6  None
7  None
8     A