簡體   English   中英

Pandas drop_duplicates 未找到所有重復項

[英]Pandas drop_duplicates not finding all duplicates

我在pandas drop_duplicates中遇到 drop_duplicates 問題。我將大量混合數據從 excel 文件導入到 dataframe,然后執行各種操作來清理數據。 其中一個階段是根據坐標刪除所有重復項。

總的來說,這工作得很好,重要的是它非常快,但我遇到了一些問題,在對數據集進行廣泛搜索后,我發現pandas總是有一些重復。

這是我的測試數據集:

             x          y      z  radius  scale    type
0   128.798699  76.038331  0.000   1.172  1.000  Node_B
1   136.373699  78.068331  0.000   1.172  1.000  Node_B
2   133.171699  74.866331  0.000   1.172  1.000  Node_B
3   135.201699  76.038331  0.000   1.172  1.000  Node_B
4   135.201699  82.442331  0.000   1.172  1.000  Node_B
5   136.373699  80.412331  0.000   1.172  1.000  Node_B
6   133.171699  83.614331  0.000   1.172  1.000  Node_B
7   127.626699  78.068331  0.000   1.172  1.000  Node_B
8   131.999699  79.240331  0.000   2.750  1.000  Node_A
9    90.199699  94.795331  0.626   0.325  0.650   Rib_B
10   85.799699  95.445331  0.626   0.325  0.650   Rib_B
11   90.199699  95.445331  0.626   0.325  0.650   Rib_B
12   91.865699  95.557331  0.537   0.438  0.876   Rib_B
13  128.798699  82.442331  0.000   1.172  1.000  Node_B
14  136.373699  80.412331  0.000   1.172  1.000  Node_B
15  158.373699  38.448331  0.000   1.172  1.000  Node_B
16  152.827699  35.246331  0.000   1.172  1.000  Node_B
17  157.201699  36.418331  0.000   1.172  1.000  Node_B
18  155.171699  35.246331  0.000   1.172  1.000  Node_B
19  215.626699  80.412331  0.000   1.172  1.000  Node_B
20  218.827699  83.614331  0.000   1.172  1.000  Node_B
21  216.798699  82.442331  0.000   1.172  1.000  Node_B
22  131.999699  79.240331  0.000   2.750  1.000  Node_A
23  128.798699  76.038331  0.000   1.172  1.000  Node_B
24  136.373699  78.068331  0.000   1.172  1.000  Node_B
25  162.051699  70.180331  0.626   0.325  0.650   Rib_D
26  162.619699  70.496331  0.626   0.325  0.650   Rib_D
27  189.948699  70.180331  0.626   0.325  0.650   Rib_D

我正在根據x,y,z坐標查找重復項,因為這些應該是唯一的位置,所以我使用df.drop_duplicates(subset=['x', 'y', 'z'], inplace=True)刪除任何從數據框中復制。 這似乎刪除了大約 90% 的重復項,但似乎總是遺漏了一些。

在示例 dataframe 中有多個重復項 [0==23, 1==24, 6==14, 8==22] 但pandas無法刪除它們。

我發現這個使用numpy和一個非常慢的迭代循環,將每個點與其他點進行比較。 50 或 100 點是可以的,但當我在 dataframe 中有 100-200K 條記錄時,需要 15-20 分鍾。

我該如何解決? drop_duplicates沒有精度參數,為什么會遺漏一些?

您可以按照@mozway 的建議使用round

PRECISION = 3

df.drop(df[['x', 'y', 'z']].round(PRECISION).duplicated().loc[lambda x: x].index, inplace=True)
print(df)

# Output
             x          y      z  radius  scale    type
0   128.798699  76.038331  0.000   1.172  1.000  Node_B
1   136.373699  78.068331  0.000   1.172  1.000  Node_B
2   133.171699  74.866331  0.000   1.172  1.000  Node_B
3   135.201699  76.038331  0.000   1.172  1.000  Node_B
4   135.201699  82.442331  0.000   1.172  1.000  Node_B
5   136.373699  80.412331  0.000   1.172  1.000  Node_B
6   133.171699  83.614331  0.000   1.172  1.000  Node_B
7   127.626699  78.068331  0.000   1.172  1.000  Node_B
8   131.999699  79.240331  0.000   2.750  1.000  Node_A
9    90.199699  94.795331  0.626   0.325  0.650   Rib_B
10   85.799699  95.445331  0.626   0.325  0.650   Rib_B
11   90.199699  95.445331  0.626   0.325  0.650   Rib_B
12   91.865699  95.557331  0.537   0.438  0.876   Rib_B
13  128.798699  82.442331  0.000   1.172  1.000  Node_B
15  158.373699  38.448331  0.000   1.172  1.000  Node_B
16  152.827699  35.246331  0.000   1.172  1.000  Node_B
17  157.201699  36.418331  0.000   1.172  1.000  Node_B
18  155.171699  35.246331  0.000   1.172  1.000  Node_B
19  215.626699  80.412331  0.000   1.172  1.000  Node_B
20  218.827699  83.614331  0.000   1.172  1.000  Node_B
21  216.798699  82.442331  0.000   1.172  1.000  Node_B
25  162.051699  70.180331  0.626   0.325  0.650   Rib_D
26  162.619699  70.496331  0.626   0.325  0.650   Rib_D
27  189.948699  70.180331  0.626   0.325  0.650   Rib_D

暫無
暫無

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

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