我有一个DataFrame和一个列表。DataFrame中与列表中的项不匹配的每个项都应该设置为None。我编写了一个列表理解,它应该检查列表中的条目是否为True,在这种情况下,应该将DataFrame的项设置为None。谁能解释我为什么得到ValueError。我尝试了从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发布于 2020-08-11 11:41:12
可以将isin与布尔索引结合使用。
l[~l.isin(abc)] = None
l
0
0 A
1 B
2 None
3 None
4 C
5 None
6 None
7 None
8 Aisin将返回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 (其中的值与列表不匹配),因此我们将使用Bitwise (~)来逆它,以便以后我们可以使用它进行布尔索引。
~l.isin(abc)
0
0 False
1 False
2 True
3 True
4 False
5 True
6 True
7 True
8 False然后使用None简单地设置为布尔索引
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发布于 2020-08-11 11:40:25
如果没有匹配,则使用DataFrame.where设置为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发布于 2020-08-11 11:42:59
您可以使用这样的pandas.DataFrame.mask方法:
>>> 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 Ahttps://stackoverflow.com/questions/63357313
复制相似问题