Python: ~ 是如何用来排除数据的?
Python: How is a ~ used to exclude data?
在下面的代码中,我知道它正在返回缓冲区外的所有记录,但我对这是如何发生的机制感到困惑。
我看到使用了“~”(又名按位不)。通过一些谷歌搜索,我对 ~ 的理解是它 returns 它传递的输入中每个位的倒数,例如,如果该位是 0,它 returns 是 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))]
我不确定你所说的实际机制到底是什么意思,如果没有看到输入和输出就很难确定,但如果有帮助,我会在下面进行解释:
geometry 列中 collisions 数据框中包含 my_union 中任何值的所有行 将被排除在新创建的 outside_range 数据框中。
~
确实执行了按位不在 python 中的操作。但这里它用于对布尔值列表(或者更确切地说 pandas 系列)的每个元素执行逻辑非运算。有关示例,请参阅 this answer。
让我们假设 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)
returns 一个布尔值,指示点 x
是否在 my_union
MultiPolygon 内。
collisions["geometry"]
是包含点的 pandas 系列。
collisions["geometry"].apply(lambda x: my_union.contains(x))
将在每个点上 运行 my_union.contains(x)
。
这将导致另一个包含布尔值的 pandas 系列,指示每个点是否在 my_union
.
内
~
然后否定这些布尔值,因此系列现在指示每个点是否 not 在 my_union
.
collisions.loc[~within_my_union]
然后选择 collisions
的所有行,其中 ~within_my_union
中的条目是 True
,即所有没有的点位于 my_union
.
内
在下面的代码中,我知道它正在返回缓冲区外的所有记录,但我对这是如何发生的机制感到困惑。
我看到使用了“~”(又名按位不)。通过一些谷歌搜索,我对 ~ 的理解是它 returns 它传递的输入中每个位的倒数,例如,如果该位是 0,它 returns 是 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))]
我不确定你所说的实际机制到底是什么意思,如果没有看到输入和输出就很难确定,但如果有帮助,我会在下面进行解释:
geometry 列中 collisions 数据框中包含 my_union 中任何值的所有行 将被排除在新创建的 outside_range 数据框中。
~
确实执行了按位不在 python 中的操作。但这里它用于对布尔值列表(或者更确切地说 pandas 系列)的每个元素执行逻辑非运算。有关示例,请参阅 this answer。
让我们假设 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)
returns 一个布尔值,指示点x
是否在my_union
MultiPolygon 内。collisions["geometry"]
是包含点的 pandas 系列。collisions["geometry"].apply(lambda x: my_union.contains(x))
将在每个点上 运行my_union.contains(x)
。 这将导致另一个包含布尔值的 pandas 系列,指示每个点是否在my_union
. 内
~
然后否定这些布尔值,因此系列现在指示每个点是否 not 在my_union
.collisions.loc[~within_my_union]
然后选择collisions
的所有行,其中~within_my_union
中的条目是True
,即所有没有的点位于my_union
. 内