Loading...

Duplicates

When merging different data sources, we’re likely to end up with duplicates that can add a lot of bias to and skew our data. Just imagine running a Telco marketing campaign and not removing your duplicates: you’ll end up targeting the same person multiple times!

Let’s use the iris dataset to understand the tools VerticaPy gives you for handling duplicate values.

from verticapy.datasets import load_iris

iris = load_iris()
iris = iris.append(load_iris().sample(3)) # adding some duplicates
iris.head(100)
123
SepalLengthCm
Numeric(7)
100%
...
123
PetalWidthCm
Numeric(7)
100%
Abc
Species
Varchar(30)
100%
14.6...0.2Iris-setosa
24.7...0.2Iris-setosa
34.7...0.2Iris-setosa
44.8...0.1Iris-setosa
54.8...0.2Iris-setosa
64.8...0.2Iris-setosa
74.9...0.2Iris-setosa
84.9...0.1Iris-setosa
94.9...0.1Iris-setosa
104.9...0.1Iris-setosa
115.0...1.0Iris-versicolor
125.0...0.2Iris-setosa
135.1...0.2Iris-setosa
145.4...1.5Iris-versicolor
155.4...0.4Iris-setosa
165.4...0.4Iris-setosa
175.5...1.0Iris-versicolor
185.5...1.1Iris-versicolor
195.6...1.3Iris-versicolor
205.7...1.2Iris-versicolor
215.7...0.4Iris-setosa
225.8...2.4Iris-virginica
235.9...1.8Iris-versicolor
246.1...1.4Iris-versicolor
256.1...1.8Iris-virginica
266.3...1.5Iris-versicolor
276.3...1.6Iris-versicolor
286.3...2.5Iris-virginica
296.4...1.3Iris-versicolor
306.5...1.8Iris-virginica
316.5...2.2Iris-virginica
326.7...1.7Iris-versicolor
336.8...1.4Iris-versicolor
346.8...2.3Iris-virginica
357.0...1.4Iris-versicolor
367.1...2.1Iris-virginica
377.7...2.2Iris-virginica
384.4...0.2Iris-setosa
394.5...0.3Iris-setosa
404.8...0.2Iris-setosa
415.0...1.0Iris-versicolor
425.1...0.5Iris-setosa
435.1...0.2Iris-setosa
445.2...1.4Iris-versicolor
455.2...0.2Iris-setosa
465.2...0.1Iris-setosa
475.4...0.4Iris-setosa
485.5...0.2Iris-setosa
495.6...1.3Iris-versicolor
505.8...1.2Iris-versicolor
515.8...1.9Iris-virginica
525.8...1.9Iris-virginica
535.9...1.5Iris-versicolor
545.9...1.8Iris-virginica
556.0...1.6Iris-versicolor
566.0...1.5Iris-versicolor
576.1...1.2Iris-versicolor
586.2...1.8Iris-virginica
596.2...1.3Iris-versicolor
606.3...1.3Iris-versicolor
616.3...1.8Iris-virginica
626.4...2.3Iris-virginica
636.5...1.5Iris-versicolor
646.5...2.0Iris-virginica
656.5...2.0Iris-virginica
666.6...1.3Iris-versicolor
676.6...1.4Iris-versicolor
686.7...1.4Iris-versicolor
696.7...1.5Iris-versicolor
706.9...1.5Iris-versicolor
716.9...2.1Iris-virginica
726.9...2.3Iris-virginica
737.2...1.6Iris-virginica
747.2...1.8Iris-virginica
757.3...1.8Iris-virginica
767.7...2.3Iris-virginica
773.3...7.8Iris-setosa
783.3...7.8Iris-setosa
793.3...7.8Iris-setosa
803.3...7.8Iris-setosa
813.3...7.8Iris-setosa
823.3...7.8Iris-setosa
833.3...7.8Iris-setosa
843.3...7.8Iris-setosa
853.3...7.8Iris-setosa
863.3...7.8Iris-setosa
873.3...7.8Iris-setosa
883.3...7.8Iris-setosa
893.3...7.8Iris-setosa
903.3...7.8Iris-setosa
913.3...7.8Iris-setosa
923.3...7.8Iris-setosa
933.3...7.8Iris-setosa
943.3...7.8Iris-setosa
953.3...7.8Iris-setosa
963.3...7.8Iris-setosa
973.3...7.8Iris-setosa
983.3...7.8Iris-setosa
993.3...7.8Iris-setosa
1003.3...7.8Iris-setosa

To find all the duplicates, you can use the duplicated() method.

iris.duplicated()
123
SepalLengthCm
Numeric(7)
...
Abc
Species
Varchar(30)
123
occurrence
Integer
13.3...Iris-setosa51
24.3...Iris-virginica50
34.9...Iris-setosa3
45.5...Iris-versicolor2
55.8...Iris-virginica2
67.4...Iris-virginica2

As you might expect, some flowers might share the exact same characteristics. But we have to be careful; this doesn’t mean that they are real duplicates. In this case, we don’t have to drop them.

That said, if we did want to drop these duplicates, we can do so with the drop_duplicates() method.

iris.drop_duplicates()
123
SepalLengthCm
Numeric(7)
100%
...
123
PetalWidthCm
Numeric(7)
100%
Abc
Species
Varchar(30)
100%
17.7...2.2Iris-virginica
25.7...0.4Iris-setosa
36.7...1.7Iris-versicolor
46.3...2.5Iris-virginica
55.4...1.5Iris-versicolor
65.5...1.1Iris-versicolor
75.7...1.2Iris-versicolor
86.1...1.4Iris-versicolor
96.4...1.3Iris-versicolor
107.1...2.1Iris-virginica
114.9...0.2Iris-setosa
127.0...1.4Iris-versicolor
135.0...0.2Iris-setosa
145.4...0.4Iris-setosa
155.8...2.4Iris-virginica
164.6...0.2Iris-setosa
174.9...0.1Iris-setosa
186.3...1.5Iris-versicolor
194.8...0.1Iris-setosa
205.4...0.4Iris-setosa

Using this method will add an advanced analytical function to the SQL code generation which is quite expensive. You should only use this method after aggregating the data to avoid stacking heavy computations on top of each other.