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