📖 知识点
1. replace ():替换数据值
把某列里的指定值替换成新值:
# 把"白菜"替换成"大白菜"
df["菜名"].replace("白菜", "大白菜")
替换多个值(用字典,旧值:新值):
# 同时替换多个
df["菜名"].replace({"白菜": "大白菜", "番茄": "西红柿"})
作用:修正错别字、统一叫法、归一化数据。如把 "男 / 男(性别)" 统一、把 "0 / 否" 统一。
2. rename ():重命名字段(列名)
把列名改成更清晰的名字:
# 用字典改列名(旧列名:新列名)
df.rename(columns={"价格": "单价", "数量": "销量"})
columns=参数指定要改的列,用 "旧名:新名" 的字典。
3. 是否原地修改
两者默认都返回新表,不改原表:
# 原地修改,用inplace=True
df["菜名"].replace("白菜", "大白菜", inplace=True)
df.rename(columns={"价格": "单价"}, inplace=True)
或重新赋值:
df = df.rename(columns={"价格":"单价"})
💡 理解
replace改的是数据值(格子里的内容)rename改的是列名(表格的表头)- 常用来:统一叫法(replace)+ 规范化表头(rename)
⚠️ 易错提醒
replace和rename默认不改原表,要inplace=True或重新赋值replace在整张表上替换时注意范围,别误换其他列rename的columns=是固定写法,别漏
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份数据(菜名、价格、数量)
- 用
replace把 "白菜" 替换成 "大白菜",用字典同时替换 "番茄"→"西红柿" - 用
rename把 "价格" 改名为 "单价"、"数量" 改名为 "销量" - 打印替换和改名后的结果
- 用
inplace=True演示原地修改
参考代码
import pandas as pd
data = {
"菜名": ["白菜", "番茄", "土豆"],
"价格": [3, 5, 2],
"数量": [10, 20, 30],
}
df = pd.DataFrame(data)
print("===== 原表 =====")
print(df)
# 勾芡替换:替换数据值
df["菜名"] = df["菜名"].replace("白菜", "大白菜")
df["菜名"] = df["菜名"].replace({"番茄": "西红柿"})
print("\n===== 替换菜名后 =====")
print(df)
# 重命名字段:改列名
df = df.rename(columns={"价格": "单价", "数量": "销量"})
print("\n===== 重命名列后 =====")
print(df)
运行输出:
===== 原表 =====
菜名 价格 数量
0 白菜 3 10
1 番茄 5 20
2 土豆 2 30
===== 替换菜名后 =====
菜名 价格 数量
0 大白菜 3 10
1 西红柿 5 20
2 土豆 2 30
===== 重命名列后 =====
菜名 单价 销量
0 大白菜 3 10
1 西红柿 5 20
2 土豆 2 30
💡 观察:
replace把 "白菜 / 番茄" 改成了统一叫法 "大白菜 / 西红柿";rename把 "价格→单价、数量→销量" 的表头规范化。
🧠 思考题
replace和rename分别改的是数据的哪一部分?什么时候该用哪个?- 把 "男 / 女 / 性别 - 男" 这类不统一的值统一成 "男 / 女",该用什么方法?
行者孙Python