데이터프레임에서 각 행은 분석 대상이 갖고 있는 모든 속성(변수)에 대한 관측값(record)을 뜻한다. 하나의 데이터셋에서 동일한 관측값이 2개 이상 중복되는 경우 중복 데이터를 찾아서 삭제해야한다. 분석결과를 왜곡 하기 때문이다.
duplicated() 메서드는 전에 나온 행과 비교해서 중복되는 행이라면 True를 리턴한다. 데이터프레임에 사용하면 각 행의 중복 여부를 확인하는 boolen 시리즈를 반환한다.
import pandas as pd
df = pd.DataFrame({
'c1': ['a', 'a', 'b', 'a', 'b'],
'c2': [1, 1, 1, 2, 2],
'c3': [1, 1, 2, 2, 2]
})
print(df)
print()
df_dup = df.duplicated()
print(df_dup)
c1 c2 c3
0 a 1 1
1 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
0 False
1 True
2 False
3 False
4 False
dtype: bool
첫째항은 중복을 확인할 행이 없으므로 당연히 False를 리턴하다. 1행에서는 0행과 비교하여 중복이므로 True를 리턴한다.
데이터프레임의 열에도 똑같이 사용할 수 있다.
import pandas as pd
df = pd.DataFrame({
'c1': ['a', 'a', 'b', 'a', 'b'],
'c2': [1, 1, 1, 2, 2],
'c3': [1, 1, 2, 2, 2]
})
print(df)
print()
col_dup = df['c2'].duplicated()
print(col_dup)
c1 c2 c3
0 a 1 1
1 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
0 False
1 True
2 True
3 False
4 True
Name: c2, dtype: bool
'c2'열에 대해서 중복을 검사했다. 1행, 2행, 4행이 중복값이라는 것을 알 수 있다.
import pandas as pd
df = pd.DataFrame({
'c1': ['a', 'a', 'b', 'a', 'b'],
'c2': [1, 1, 1, 2, 2],
'c3': [1, 1, 2, 2, 2]
})
print(df)
print()
df2 = df.drop_duplicates()
print(df2)
c1 c2 c3
0 a 1 1
1 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
c1 c2 c3
0 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
subset 옵션에 열 이름의 리스트를 전달할 수 있다.
import pandas as pd
df = pd.DataFrame({
'c1': ['a', 'a', 'b', 'a', 'b'],
'c2': [1, 1, 1, 2, 2],
'c3': [1, 1, 2, 2, 2]
})
print(df)
print()
df2 = df.drop_duplicates(subset='c2')
print(df2)
c1 c2 c3
0 a 1 1
1 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
c1 c2 c3
0 a 1 1
3 a 2 2