📖 知识点
1. 为什么要做类型转换?
数据类型决定能做什么操作:
- 数字列才能加减、算均值
- 日期列才能按时间排序、分析
- 文本列不能直接算数
如果 "价格" 读成了文本(object),df["价格"].sum() 会出错或乱算。用 astype 把它转成数字,数据才 "入味可用"。
💡 生活比喻 糖该是甜的、盐该是咸的。astype 就是把误放的糖换成盐、把整包调料归位 —— 让每样数据回到它该有的 "属性"。
2. astype () 基本用法
# 把"价格"列转成整数
df["价格"] = df["价格"].astype(int)
# 把"销量"列转成浮点数
df["销量"] = df["销量"].astype(float)
# 把"日期"列转成字符串
df["日期"] = df["日期"].astype(str)
3. 常用类型
| 类型 | 说明 | 例子 |
|---|---|---|
int | 整数 | astype(int) |
float | 小数 | astype(float) |
str | 文本 | astype(str) |
bool | 布尔 | astype(bool) |
4. 查看转换效果
转换后用 dtypes 验证:
df["价格"] = df["价格"].astype(int)
print(df.dtypes) # 价格变为 int64
⚠️ 易错提醒
astype返回新列,要赋值回原列或原表才生效(df["列"] = df["列"].astype(int))- 列里若有无法转的文本(如 "5 元"),转 int 会报错,需先清洗(Day12)
- 转换前先用
dtypes看清当前类型,判断需不需要转
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份 "含文本数字" 的数据(价格是字符串、数量是字符串)
- 先用
dtypes查看当前类型(应为 object 文本) - 用
astype把 "价格" 转成 int、"数量" 转成 float - 再次查看
dtypes,确认类型已转换 - 用转换后的数字列做一次求和,验证可正常计算
参考代码
import pandas as pd
# 数据里价格、数量是"文本数字"(object类型)
data = {
"菜名": ["白菜", "番茄", "土豆"],
"价格": ["3", "5", "2"], # 字符串数字
"数量": ["10", "20", "30"], # 字符串数字
}
df = pd.DataFrame(data)
print("===== 转换前类型 =====")
print(df.dtypes)
# 调味转化:把文本数字转成真正的数字
df["价格"] = df["价格"].astype(int)
df["数量"] = df["数量"].astype(float)
print("\n===== 转换后类型 =====")
print(df.dtypes)
print("\n===== 验证可计算 =====")
print("总价合计:", df["价格"].sum())
print("数量合计:", df["数量"].sum())
运行输出:
===== 转换前类型 =====
菜名 object
价格 object
数量 object
dtype: object
===== 转换后类型 =====
菜名 object
价格 int64
数量 float64
dtype: object
===== 验证可计算 ====="
总价合计: 10
数量合计: 60.0
💡 观察:转换前价格 / 数量是 object(文本),无法算数;astype 转成 int/float 后,
.sum()正常求和。这就是 "调味" 的威力。
🧠 思考题
- 如果 "价格" 列是
"5元"这样的文本,直接astype(int)会怎样?应该先做什么? - 为什么说 "类型决定能做什么操作"?举一个数字列是文本导致出错的例子。