[英]Python: How is a ~ used to exclude data?
在下面的代码中,我知道它正在返回缓冲区之外的所有记录,但我对这种情况的发生机制感到困惑。
我看到有一个“~”(也就是按位不)正在使用。 从一些谷歌搜索我对〜的理解是它返回它传递的输入中每个位的倒数,例如,如果该位为0,则返回1。如果不是有人可以请ELI5,这是否正确?
有人可以解释一下以下代码如何返回“my_union”缓冲区之外的记录的实际机制吗?
注意:医院和碰撞只是地理数据框。
coverage = gpd.GeoDataFrame(geometry=hospitals.geometry).buffer(10000)
my_union = coverage.geometry.unary_union
outside_range = collisions.loc[~collisions["geometry"].apply(lambda x: my_union.contains(x))]
我不确定你所说的实际力学到底是什么意思,如果没有看到输入和 output,很难确定,但如果有帮助,我有一个 go 在下面解释它:
碰撞dataframe 中几何列中包含 my_union 中的任何值的所有行都将被排除在新创建的outside_range dataframe 中。
~
确实在 python 中按位执行。 但这里它用于对布尔值列表(或者更确切地说 pandas 系列)的每个元素执行逻辑非。 有关示例,请参见此答案。
让我们假设collisions
GeoDataFrame 包含点,但它对于其他类型的几何图形也同样适用。 让我进一步更改代码:
coverage = gpd.GeoDataFrame(geometry=hospitals.geometry).buffer(10000)
my_union = coverage.geometry.unary_union
within_my_union = collisions["geometry"].apply(lambda x: my_union.contains(x))
outside_range = collisions.loc[~within_my_union]
然后:
my_union
是单个(多)多边形。
my_union.contains(x)
返回一个 boolean 指示点x
是否在my_union
MultiPolygon 内。
collisions["geometry"]
是包含点的 pandas 系列。
collisions["geometry"].apply(lambda x: my_union.contains(x))
将在每个点上运行my_union.contains(x)
。 这将导致另一个 pandas 系列包含布尔值,指示每个点是否在my_union
内。
~
然后否定这些布尔值,因此 Series 现在指示每个点是否不在my_union
内。
collisions.loc[~within_my_union]
然后选择 ~ ~within_my_union
中的条目为True
的所有collisions
行,即不在my_union
内的所有点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.