零基础入门 Pandas:数据处理的 "万能工具"
如果你是刚接触数据分析的小白,一定听过 "Pandas" 这个名字。简单说,Pandas 是 Python 中专门用来处理数据的工具库,就像 Excel 的 "高级版"—— 能更快、更灵活地处理成千上万行数据,是数据分析入门的必备技能。下面用最通俗的语言,带你一步步认识 Pandas 的核心用法。
一、先搞懂:Pandas 最核心的 2 种数据结构
Pandas 之所以好用,是因为它有 2 种专门为数据设计的 "容器",所有数据处理都围绕这两种容器展开。
1. Series:像 "带标签的列表"(一维数据)
可以理解为只有 1 列的表格,比如 "班级学生的数学成绩":
- 左边是 "标签"(索引,比如学生姓名 / 学号)
- 右边是 "数据"(比如成绩)
举个例子(代码可直接复制运行):
import pandas as pd # 先"召唤"Pandas工具
# 用字典创建Series(键=标签,值=数据)
成绩 = pd.Series({'小明': 90, '小红': 85, '小刚': 95})
print(成绩)
运行后会看到:
小明 90
小红 85
小刚 95
dtype: int64 # 数据类型是整数
2. DataFrame:像 "Excel 表格"(二维数据)
这是 Pandas 最常用的结构,有行标签(索引)、列标签(列名)和数据,比如 "班级学生的各科成绩":
举个例子:
# 用"字典套列表"创建DataFrame(键=列名,值=该列数据)
各科成绩 = pd.DataFrame({
'数学': [90, 85, 95],
'语文': [88, 92, 89],
'英语': [92, 88, 94]
}, index=['小明', '小红', '小刚']) # 指定行标签
print(各科成绩)
运行后会看到熟悉的表格:
数学 语文 英语
小明 90 88 92
小红 85 92 88
小刚 95 89 94
📌 关键区别:Series 只有 1 列,没有 "列名";DataFrame 有多列,必须有 "列名",就像 Excel 的表头。
二、第一步:读取外部数据(比如 CSV/Excel)
实际分析中,数据很少是自己手写的,大多来自外部文件(比如 CSV、Excel)。Pandas 一句话就能读取:
1. 读取 CSV 文件(最常用)
CSV 是纯文本表格,比 Excel 体积小,适合大数据。
# 读取本地CSV(路径写文件在你电脑里的位置,比如"桌面/数据.csv")
df = pd.read_csv("本地文件路径.csv")
# 也能直接读取网上的CSV(比如下面这个是洛杉矶人口数据)
df = pd.read_csv("https://labfile.oss.aliyuncs.com/courses/906/los_census.csv")
2. 读取后先 "预览" 数据
如果数据有几万行,直接打印会卡死,用这两个方法看前几行 / 后几行:
df.head() # 默认看前5行(括号里写数字可改,比如head(10)看前10行)
df.tail() # 默认看后5行(同理tail(7)看后7行)
3. 快速了解数据 "概况"
用describe()
能一键看到数据的统计信息(比如最大值、最小值、平均值),帮你快速把握数据特征:
df.describe() # 只对数字类型的列有效
三、核心操作 1:选择你需要的数据(数据索引)
拿到表格后,经常需要 "只看某几行 / 某几列",Pandas 有两种最常用的选择方式:
方式 1:按 "数字位置" 选(iloc)
就像 Excel 里的 "第 1 行、第 2 列",不管行标签 / 列名是什么,只看位置(从 0 开始数!)。
语法:df.iloc[行位置, 列位置]
(逗号前是行,逗号后是列)
举个例子(用前面的 "各科成绩" 表格):
行位置 | 行标签 | 数学(列 0) | 语文(列 1) | 英语(列 2) |
---|---|---|---|---|
0 | 小明 | 90 | 88 | 92 |
1 | 小红 | 85 | 92 | 88 |
2 | 小刚 | 95 | 89 | 94 |
# 1. 选前2行(行位置0和1)
各科成绩.iloc[:2] # 冒号表示"到...为止",[:2] = 从0到1(不包含2)
# 2. 选第1行(位置0)、第2列(位置1,语文)
各科成绩.iloc[0, 1] # 结果:88(小明的语文成绩)
# 3. 选第0、2行(小明、小刚),第0、2列(数学、英语)
各科成绩.iloc[[0,2], [0,2]]
方式 2:按 "标签名称" 选(loc)
直接用 "行标签(比如小明)" 或 "列名(比如数学)" 选,更直观,不用记位置。
语法:df.loc[行标签, 列名]
举个例子:
# 1. 选"小明"这一行
各科成绩.loc['小明']
# 2. 选"数学"这一列
各科成绩.loc[:, '数学'] # 逗号前写":"表示"所有行"
# 3. 选"小明、小刚"的"语文、英语"成绩
各科成绩.loc[['小明','小刚'], ['语文','英语']]
📌 小白记住:分不清就优先用
loc
(按名称选),不容易出错;需要按 "第 N 行第 N 列" 就用iloc
。
四、核心操作 2:删除不需要的数据
拿到数据后,经常要删冗余的行 / 列、重复数据或空白数据。
1. 删除指定行 / 列(drop)
比如表格里有 "学号" 列用不上,直接删掉:
# 删除"学号"列(axis=1表示删列,axis=0表示删行)
df.drop(labels='学号', axis=1)
# 删除第0行(行标签为0)
df.drop(labels=0, axis=0)
2. 删除重复数据(drop_duplicates)
比如表格里有完全一样的两行(重复录入),一键去重:
df.drop_duplicates() # 默认删除所有列都重复的行
3. 删除空白数据(dropna)
数据里经常有 "空白格"(Pandas 里叫 NaN),比如某个人的英语成绩没填,直接删掉这一行:
df.dropna() # 默认删除包含任何空白的行
五、核心操作 3:填充空白数据(fillna)
如果空白数据不多,直接删除太可惜,就用合理的数值填充(比如用平均值)。
1. 用固定值填充(比如 0)
# 所有空白都填0
df.fillna(0)
2. 用前后值填充
比如某个人的英语成绩空白,用他前一个人的成绩填(或后一个人):
df.fillna(method='pad') # pad=用前面的值填充(向前填充)
df.fillna(method='bfill') # bfill=用后面的值填充(向后填充)
3. 用平均值填充(最常用)
比如数学成绩有空白,用全班数学的平均值填,更合理:
# 用"数学"列的平均值,填充该列的空白
df['数学'].fillna(df['数学'].mean())
4. 插值填充(更智能)
如果数据有趋势(比如温度随时间上升),用 "插值" 能更贴合数据规律。比如:
# 生成一个有空白的温度数据
温度数据 = pd.DataFrame({'温度': [20, np.nan, 25, np.nan, 30]})
# 线性插值(按中间值填,比如20和25之间的空白填22.5)
温度数据.interpolate()
运行后空白会被智能填充:
温度
0 20.0
1 22.5 # 插值结果
2 25.0
3 27.5 # 插值结果
4 30.0
六、快速绘图:让数据变直观
Pandas 能直接调用绘图工具,一句话画出折线图、柱状图等,不用学复杂的绘图库。
比如用前面的 "各科成绩" 画柱状图:
# 画柱状图(kind='bar'表示柱状图,默认是折线图)
各科成绩.plot(kind='bar')
运行后会自动弹出图表,能清晰看到每个人各科成绩的对比。
七、小白入门总结
- 核心结构:先记住 Series(1 列)和 DataFrame(表格),90% 的操作都用这两个。
- 数据读取:用
pd.read_csv()
读文件,head()
预览,describe()
看概况。 - 数据选择:按名称用
loc
(简单),按位置用iloc
(灵活)。 - 数据清理:删数据用
drop
/drop_duplicates
/dropna
,填数据用fillna
/interpolate
。 - 快速绘图:用
df.plot(kind='xxx')
看数据趋势。