[英]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.