作为数据分析专家,请给小白介绍Pandas库中识别及删除重复数据的方法。
当然!下面是为小白用户量身定制的 Pandas 教程,教你如何识别和删除重复数据(duplicate data),通俗易懂、一步步带你走!
🐼 什么是 Pandas?
Pandas 是 Python 的一个数据分析神器,就像 Excel 的进阶版!我们常用它来读表格、筛选数据、分析规律。
🎯 为什么要管“重复数据”?
在真实世界里,数据可能因为多次采集、合并表格、手动录入等原因,出现一模一样或部分重复的记录。如果不清理干净,会影响统计分析结果!
🔍 第一步:识别重复数据
假设你有一个表格如下:
import pandas as pddata = {'name': ['Alice', 'Bob', 'Alice', 'David'],'age': [25, 30, 25, 40]}df = pd.DataFrame(data)print(df)
输出结果:
name age0 Alice 251 Bob 302 Alice 25 ← 重复了!3 David 40
✅ 用 .duplicated() 来识别:
df.duplicated()
返回一个布尔值序列,代表每一行是否是重复的(默认从上往下比较)。
结果:
0 False1 False2 True ← 是重复的3 False
✅ 默认检查整行是否重复,你也可以指定只看某几列,比如只看
name:
df.duplicated(subset=['name'])
🧹 第二步:删除重复数据
🚮 用 .drop_duplicates() 来干掉它!
df_clean = df.drop_duplicates()print(df_clean)
结果:
name age0 Alice 251 Bob 303 David 40
注意!默认是保留第一次出现的,后面的都删掉了。
想要就地修改原 DataFrame?
加个参数:
df.drop_duplicates(inplace=True)
🧠 小技巧锦囊
|
|
|
|---|---|
df.duplicated() |
|
df.duplicated(subset=['列名']) |
|
df.drop_duplicates() |
|
keep='first' |
|
keep='last' |
|
keep=False |
|
🧪 举个进阶例子
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Alice', 'Alice'],'age': [25, 30, 25, 26]})# 看看 name 和 age 是否一起重复print(df.duplicated(subset=['name', 'age']))
✅ 总结一句话!
用 duplicated() 找,drop_duplicates() 删,怕错就加 subset 指定列!
数据排序
作为数据分析专家,请给小白介绍Pandas中数据排序的方法,并给出示例。
当然可以!作为一个数据分析老司机,我来带你这位小白快速入门 Pandas 中最常用的操作之一:数据排序!
🎯 为什么排序很重要?
排序就像在 Excel 里点表头排序一样,用来让数据更清晰、逻辑更强,比如:
找出销量最高的商品
按时间顺序查看事件记录
对名字排序来更方便检索
🔧 Pandas 排序的两种主要方法
|
|
|
|---|---|
sort_values() |
|
sort_index() |
|
🚀 一、按值排序:sort_values()
最常见的方式就是对某一列的值从小到大、或从大到小排序。
🔹 示例:
import pandas as pddata = {'name': ['Alice', 'Bob', 'Charlie', 'David'],'age': [25, 30, 22, 35]}df = pd.DataFrame(data)
按年龄升序排序(默认):
df_sorted = df.sort_values(by='age')print(df_sorted)
输出:
name age2 Charlie 220 Alice 251 Bob 303 David 35
按年龄降序排序:
df_sorted = df.sort_values(by='age', ascending=False)
按多个列排序(先按年龄,再按姓名):
df_sorted = df.sort_values(by=['age', 'name'])
🔄 二、按索引排序:sort_index()
如果你想把 DataFrame 按索引的大小来排序,就用这个!
举个例子:
df2 = df.sort_values(by='age', ascending=False)print(df2)
这时候的索引是乱的(0, 1, 2, 3被打乱了):
name age3 David 351 Bob 300 Alice 252 Charlie 22
你想恢复排序后的顺序?
df2 = df2.sort_index()
🧠 一些常用参数总结:
|
|
|
|---|---|
by='列名' |
|
ascending=True |
|
inplace=True |
|
ignore_index=True |
|
na_position='last' |
|
🧪 一个带缺失值的例子:
df3 = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],'score': [88, None, 75, 95]})df3.sort_values(by='score', na_position='first', inplace=True)print(df3)
✅ 总结一句话!
用 sort_values(by=列名) 排值,用 sort_index() 排索引,加上 ascending 控制升降,加 inplace 直接改!
作为数据分析专家,请介绍Pandas的merge ()方法,并对参数进行详细讲解,列举示例,并对合并结果进行解释。
太好了!你现在正在进入 Pandas 中最强大的操作之一 —— merge() 合并方法,它是数据分析师的“拼图神器”。
如果你熟悉 SQL 里的 JOIN,这个方法就是 Python/Pandas 世界里的对应物。
🧩 一、什么是 merge()?
merge() 就是把两个表格按某个关键列(key)对齐拼接起来,类似数据库里的连接操作(join)。
🔧 二、基本语法
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, ...)
核心参数解析:
|
|
|
|---|---|
left/ |
|
on |
|
left_on/ |
|
how |
inner / left / right / outer
|
suffixes |
('_left', '_right')
|
🔀 三、合并方式详解(how)
|
|
|
|---|---|
'inner'(默认) |
|
'left' |
|
'right' |
|
'outer' |
|
🧪 四、实战示例
👉 先准备两个表:
import pandas as pd# 左表:员工信息df1 = pd.DataFrame({'emp_id': [1, 2, 3],'name': ['Alice', 'Bob', 'Charlie']})# 右表:薪资信息df2 = pd.DataFrame({'emp_id': [2, 3, 4],'salary': [7000, 8000, 9000]})
1️⃣ 默认 inner 合并(交集):
result = pd.merge(df1, df2, on='emp_id')print(result)
输出:
emp_id name salary0 2 Bob 70001 3 Charlie 8000
🧠 解读:只保留 emp_id=2 和 3,因为左右表都存在。
2️⃣ left 合并(以左表为主):
result = pd.merge(df1, df2, on='emp_id', how='left')print(result)
输出:
emp_id name salary0 1 Alice NaN1 2 Bob 7000.02 3 Charlie 8000.0
🧠 解读:保留所有左表的员工,右边没有匹配的就填 NaN。
3️⃣ outer 合并(全并集):
result = pd.merge(df1, df2, on='emp_id', how='outer')print(result)
输出:
emp_id name salary0 1 Alice NaN1 2 Bob 7000.02 3 Charlie 8000.03 4 NaN 9000.0
🧠 解读:所有 emp_id 都保留,哪边没有的就补 NaN。
4️⃣ 当左右的 key 列不同名时:
df1 = pd.DataFrame({'id': [1, 2, 3],'name': ['Alice', 'Bob', 'Charlie']})df2 = pd.DataFrame({'emp_id': [2, 3, 4],'salary': [7000, 8000, 9000]})result = pd.merge(df1, df2, left_on='id', right_on='emp_id', how='inner')print(result)
输出:
id name emp_id salary0 2 Bob 2 70001 3 Charlie 3 8000
🧠 五、常见问题小贴士
重复列名怎么办?
用suffixes=('_left', '_right')来区分同名列。key列有重复?
会产生“笛卡尔积”,即一对多或多对多组合,注意观察是否合理。合并完后索引乱了?
可以reset_index(drop=True)清理一下。
✅ 总结口诀:
merge 是连接,on 是主键,how 控制拼法,NaN 是匹配不到的标志。列名不一样?用 left_on/right_on!

