簡體   English   中英

Python:a ~ 怎么用來排除數據?

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

然后:

  1. my_union是單個(多)多邊形。

  2. my_union.contains(x)返回一個 boolean 指示點x是否在my_union MultiPolygon 內。

  3. collisions["geometry"]是包含點的 pandas 系列。

  4. collisions["geometry"].apply(lambda x: my_union.contains(x))將在每個點上運行my_union.contains(x) 這將導致另一個 pandas 系列包含布爾值,指示每個點是否在my_union內。

  5. ~然后否定這些布爾值,因此 Series 現在指示每個點是否不在my_union內。

  6. collisions.loc[~within_my_union]然后選擇 ~ ~within_my_union中的條目為True的所有collisions行,即不在my_union內的所有點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM