第3章 Python基础:从零开始写第一行靠谱代码
说实话,很多初学者觉得Python基础语法枯燥。但我告诉你,数据清洗的成败,往往就卡在这些基础细节上。我自己带团队时,见过太多人因为变量命名不规范、类型转换踩坑,导致整个清洗流程跑不通。
这一章,咱们就把Python的根基打牢。别急,我会把我在项目中踩过的坑、总结的技巧,都揉碎了讲给你听。
3.1 注释:写给未来的自己看
注释这东西,说白了就是代码里的「便签纸」。我个人的习惯是:写注释时,想象三个月后的自己看到这段代码,能不能秒懂?
单行注释:用 # 开头
# 这是单行注释,我通常用它解释「为什么这么写」
age = 25 # 变量后面也可以加注释,但别写废话
多行注释:用三个引号 ''' 或 """
"""
这是一个多行注释
我经常用它来临时屏蔽一大段测试代码
或者写函数的功能说明
"""
我的经验:注释不是越多越好。我曾经接手过一个项目,每行代码后面都跟着注释「这行是赋值」「这行是打印」……毫无意义。注释要回答「为什么」,而不是「是什么」。
3.2 变量与数据类型:装数据的盒子
变量就像一个个盒子,每个盒子都有名字,里面装着不同类型的数据。Python是动态类型语言——你不需要提前告诉它盒子里装什么,它会自己判断。
| 数据类型 | 例子 | 说明 |
|---|---|---|
| 整数 (int) | age = 28 |
没有小数点的数字 |
| 浮点数 (float) | price = 19.99 |
带小数点的数字 |
| 字符串 (str) | name = "张三" |
用引号包起来的文本 |
| 布尔值 (bool) | is_ok = True |
只有 True 和 False |
| 列表 (list) | items = [1, 2, 3] |
有序的集合,可修改 |
| 字典 (dict) | person = {"name": "李四"} |
键值对存储 |
避坑指南:我曾经在清洗一个销售数据表时,把「订单金额」直接当整数处理,结果发现有些金额是 19.99 这样的浮点数。Python 里 19 和 19.99 是两种类型,运算结果完全不同。做数据清洗时,一定要先确认数据类型。
3.3 标识符与关键字:起名字的规矩
给变量起名字,就像给孩子起名,有规矩。Python里有一套「保留字」,你不能拿来当变量名。
- 标识符规则:只能包含字母、数字、下划线,不能以数字开头
- 区分大小写:
Name和name是两个不同的变量 - 避免关键字:比如
if、for、while、True这些都不能用
正确示范:
user_name = "小王" # 下划线命名法,我强烈推荐
total_price = 100.5 # 见名知意
data_2024 = [] # 数字可以放后面
我的习惯:在数据清洗项目中,我通常用「下划线命名法」。比如 raw_data、clean_data、null_count。这样一眼就能看出变量是干什么的。千万别用 a、b、c 这种名字,三个月后你自己都看不懂。
3.4 输入与输出:和程序对话
数据清洗的第一步,往往是读取数据。但调试阶段,我习惯先用 input() 和 print() 来测试逻辑。
# 输入:从键盘获取数据,返回的是字符串
user_input = input("请输入你的名字:")
# 输出:打印到控制台
print("你好," + user_input)
# 格式化输出,我经常用 f-string
age = 25
print(f"我今年 {age} 岁了")
注意:input() 返回的永远是字符串!如果你要输入数字做运算,必须手动转换。我曾经有个学员,直接用 input() 拿到的「年龄」去做加法,结果变成了字符串拼接——"25" + "5" = "255",而不是 30。
3.5 运算符:做计算的工具
运算符就是数学里的加减乘除,但Python里多了几个「花活」。
| 类型 | 运算符 | 例子 | 结果 |
|---|---|---|---|
| 算术 | + - * / // % ** |
10 // 3 |
3(整除) |
| 比较 | == != > < >= <= |
5 > 3 |
True |
| 逻辑 | and or not |
True and False |
False |
| 赋值 | = += -= *= |
x += 1 |
等价于 x = x + 1 |
我的经验:在数据清洗中,//(整除)和 %(取余)特别有用。比如你要把数据按每100条分一组,index // 100 就能算出组号。还有 and 和 or,我经常用来写多条件筛选——「年龄大于18且小于60」这种。
3.6 类型转换:让数据「变形」
数据清洗里最常干的事,就是类型转换。你从CSV文件读进来的数据,全是字符串,必须转成正确的类型才能分析。
# 字符串转整数
age_str = "25"
age_int = int(age_str) # 结果是 25(整数)
# 字符串转浮点数
price_str = "19.99"
price_float = float(price_str) # 结果是 19.99
# 数字转字符串
count = 100
count_str = str(count) # 结果是 "100"
# 转布尔值
# 注意:空字符串、0、None、空列表都会转成 False
bool("") # False
bool("abc") # True
bool(0) # False
bool(1) # True
避坑指南:我曾经处理过一个用户年龄字段,里面混着「25岁」「18周岁」「三十」这样的脏数据。直接用 int() 转换会报错。我的做法是:先写一个清洗函数,把非数字字符去掉,再转换。记住,永远不要假设数据是干净的。
3.7 实战小技巧:写代码前的检查清单
嗯,这里我要分享一个我自己的习惯。每次开始写数据清洗脚本前,我都会做这三件事:
- 打印数据类型:用
type()检查每个字段的类型 - 测试转换:先拿一条数据试
int()或float(),看会不会报错 - 写注释:在关键转换处写上「为什么这么转」
# 我的调试三板斧
sample = "123"
print(type(sample)) # 看看是什么类型
print(int(sample)) # 试试能不能转
# 如果报错,说明数据有问题,需要先清洗
你想想看,如果连基础的类型转换都搞不定,后面那些高级的数据清洗技巧根本用不上。这一章的内容,我建议你边看边敲代码,每个例子都亲手跑一遍。遇到报错别慌——我当年也是从「SyntaxError」一路爬过来的。
下一章,咱们聊聊流程控制——怎么让代码根据条件做不同的事。这可是数据清洗的核心逻辑。