第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 里 1919.99 是两种类型,运算结果完全不同。做数据清洗时,一定要先确认数据类型。

3.3 标识符与关键字:起名字的规矩

给变量起名字,就像给孩子起名,有规矩。Python里有一套「保留字」,你不能拿来当变量名。

  • 标识符规则:只能包含字母、数字、下划线,不能以数字开头
  • 区分大小写Namename 是两个不同的变量
  • 避免关键字:比如 ifforwhileTrue 这些都不能用

正确示范

user_name = "小王"   # 下划线命名法,我强烈推荐
total_price = 100.5  # 见名知意
data_2024 = []       # 数字可以放后面

我的习惯:在数据清洗项目中,我通常用「下划线命名法」。比如 raw_dataclean_datanull_count。这样一眼就能看出变量是干什么的。千万别用 abc 这种名字,三个月后你自己都看不懂。

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 就能算出组号。还有 andor,我经常用来写多条件筛选——「年龄大于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 实战小技巧:写代码前的检查清单

嗯,这里我要分享一个我自己的习惯。每次开始写数据清洗脚本前,我都会做这三件事:

  1. 打印数据类型:用 type() 检查每个字段的类型
  2. 测试转换:先拿一条数据试 int()float(),看会不会报错
  3. 写注释:在关键转换处写上「为什么这么转」
# 我的调试三板斧
sample = "123"
print(type(sample))        # 看看是什么类型
print(int(sample))         # 试试能不能转
# 如果报错,说明数据有问题,需要先清洗

你想想看,如果连基础的类型转换都搞不定,后面那些高级的数据清洗技巧根本用不上。这一章的内容,我建议你边看边敲代码,每个例子都亲手跑一遍。遇到报错别慌——我当年也是从「SyntaxError」一路爬过来的。

下一章,咱们聊聊流程控制——怎么让代码根据条件做不同的事。这可是数据清洗的核心逻辑。