0Pricing
Python Academy · 课时

合并、连接与数据清洗

合并 DataFrames,并以专业方式处理缺失值。

合并、连接与数据清洗 是 CoddyKit 上的免费 Python Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

pd.merge

pd.merge(left, right, on="key") 会根据公共列连接两个 DataFrames,类似于 SQL JOIN。

import pandas as pd

users = pd.DataFrame({"id":[1,2,3],"name":["A","B","C"]})
orders = pd.DataFrame({"user_id":[1,1,2],"amount":[100,50,200]})
result = pd.merge(users, orders, left_on="id", right_on="user_id")
print(result)

连接类型

指定 how="inner"(默认值)、"left"、"right" 或 "outer",以控制保留哪些行。

import pandas as pd

A = pd.DataFrame({"key":["a","b","c"],"val":[1,2,3]})
B = pd.DataFrame({"key":["b","c","d"],"x":[10,20,30]})

print(pd.merge(A, B, on="key", how="left"))   # all of A
print(pd.merge(A, B, on="key", how="outer"))  # all rows

df.join

df.join(other) 根据索引进行连接。当连接依据是索引而不是列时,这种方式更快、更简单。

import pandas as pd

df1 = pd.DataFrame({"a":[1,2]}, index=["x","y"])
df2 = pd.DataFrame({"b":[3,4]}, index=["x","y"])
print(df1.join(df2))
# x: a=1 b=3
# y: a=2 b=4

concat

pd.concat([df1, df2]) 会沿垂直方向(axis=0)或水平方向(axis=1)堆叠 DataFrames。

import pandas as pd

df1 = pd.DataFrame({"a":[1,2]})
df2 = pd.DataFrame({"a":[3,4]})
print(pd.concat([df1,df2], ignore_index=True))
# a: 1 2 3 4

# Horizontal:
df3 = pd.DataFrame({"b":[5,6]})
print(pd.concat([df1,df3], axis=1))

处理缺失值

使用 isna()/notna() 检测 NaN。使用 fillna() 填充,使用 dropna() 删除。

import pandas as pd, numpy as np

df = pd.DataFrame({"a":[1,np.nan,3],"b":[np.nan,2,3]})
print(df.isna().sum())      # count nulls per column
df["a"] = df["a"].fillna(0)
df = df.dropna()            # drop rows with any null

fillna 策略

可以使用常量、向前填充(ffill)、向后填充(bfill)或列均值来填充缺失值。

import pandas as pd, numpy as np

df = pd.DataFrame({"val":[1, np.nan, np.nan, 4]})
print(df["val"].ffill())   # forward fill: 1 1 1 4
print(df["val"].bfill())   # back fill:    1 4 4 4
print(df["val"].fillna(df["val"].mean()))   # fill with mean

更改数据类型

使用 astype() 转换列类型。使用 pd.to_datetime() 解析日期,使用带有 errors="coerce" 的 pd.to_numeric 安全地转换为数值。

import pandas as pd

df = pd.DataFrame({"age":["25","30","35"],"date":["2024-01-01","2024-06-15","2024-12-31"]})
df["age"] = df["age"].astype(int)
df["date"] = pd.to_datetime(df["date"])
print(df.dtypes)

字符串清理

Pandas 的 .str 访问器提供向量化字符串操作:strip()、lower()、replace() 和 extract()。

import pandas as pd

df = pd.DataFrame({"name":["  Alice  "," bob","CAROL"]})
df["clean"] = df["name"].str.strip().str.title()
print(df["clean"])   # Alice / Bob / Carol

重命名和重新排序列

使用 df.rename(columns={"old":"new"}) 重命名。通过使用列表进行索引来重新排序。

import pandas as pd

df = pd.DataFrame({"a":[1],"b":[2],"c":[3]})
df = df.rename(columns={"a":"alpha","b":"beta"})
df = df[["c","beta","alpha"]]   # reorder
print(df.columns.tolist())      # ['c', 'beta', 'alpha']

检测重复项

使用 duplicated() 查找重复项,使用 drop_duplicates() 删除重复项。

import pandas as pd

df = pd.DataFrame({"id":[1,2,1,3],"val":["a","b","a","c"]})
print(df.duplicated())           # [F F T F]
print(df[df.duplicated()])       # show duplicates
clean = df.drop_duplicates(subset=["id"])

使用 apply 变换行和列

df.apply(func, axis=1) 会将函数应用于每一行。axis=0 会将函数应用于每一列。

import pandas as pd

df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})
# New column = row sum:
df["total"] = df.apply(lambda row: row["a"] + row["b"], axis=1)
print(df)

快速检查

df.fillna(method="ffill") 的作用是什么?

回顾

使用 pd.merge 执行类似 SQL 的连接,使用 pd.concat 进行堆叠。使用 isna()、fillna() 和 dropna() 处理 NaN。使用 .str 访问器清理字符串。使用 astype() 和 pd.to_datetime() 转换类型。

常见问题解答

「合并、连接与数据清洗」课时是免费的吗?

是的 — 「合并、连接与数据清洗」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「合并、连接与数据清洗」这节课中我会学到什么?

合并 DataFrames,并以专业方式处理缺失值。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「合并、连接与数据清洗」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Series 与 DataFrame 基础
  2. 索引、筛选与布尔掩码
  3. GroupBy、聚合与数据透视表
  4. 合并、连接与数据清洗
← 返回 Python Academy