pandas(文本去重)根据某列删除重复行
方法一:
unique()函数,该函数用于获取Series对象的唯一值。
import pandas as pd
dic = {
'name':['a', 'b', 'c', 'd'], 'comment':['abc', '真棒', '真棒', '123']}
df = pd.DataFrame(dic)
df
Out[4]:
name comment
0 a abc
1 b 真棒
2 c 真棒
3 d 123
df['comment'] = pd.DataFrame(df['comment'].unique())
df
Out[5]:
name comment
0 a abc
1 b 真棒
2 c 123
3 d NaN
# 删除comment中的空值
df = df.dropna(subset=['comment'])
df
Out[6]:
name comment
0 a abc
1 b 真棒
2 c 123
方法二:
drop_duplicates(subset=[‘comment’], keep=‘first’, inplace=True)
subset: 列表的形式填写要进行去重的列名,默认为None,表示根据所有列进行。
keep: 可选参数有三个:‘first’、 ‘last’、 False, 默认值 ‘first’。其中,
(1)first表示: 保留第一次出现的重复行,删除后面的重复行。
(2)last表示: 删除重复项,保留最后一次出现。
(3)False表示: 删除所有重复项。
inplace:默认为False,删除重复项后返回副本。True,直接在原数据上删除重复项。
import pandas as pd
dic = {
'name':['a', 'b', 'c', 'd'], 'comment':['abc', '真棒', '真棒', '123']}
df = pd.DataFrame(dic)
df
Out[6]:
name comment
0 a abc
1 b 真棒
2 c 真棒
3 d 123
df.drop_duplicates(keep='first', inplace=True)
df
Out[14]:
name comment
0 a abc
1 b 真棒
2 c 真棒
3 d 123
subset默认为None,根据所有列考虑,1,2列虽然comment相同,但name不相同,故保留,使用时根据具体情况进行选择。
df.drop_duplicates(subset=['comment'], keep='first', inplace=True)
df
Out[16]:
name comment
0 a abc
1 b 真棒
3 d 123
设置subset为comment即可删除该列重复值。此时索引没有重置,如有需要可使用以下方法重置索引。
df.reset_index(drop=True, inplace=True)
df
Out[18]:
name comment
0 a abc
1 b 真棒
2 d 123