day-036-Pandas入门
📅 2026/7/22 4:10:21
👁️ 阅读次数
📝 编程学习
Day 36:Pandas 入门——Series 与 DataFrame
NumPy 处理的是纯数字数组,现实数据往往是表格——每列有不同类型,还有列名。Pandas 就是为此而生的。今天学 Pandas 的两个核心数据结构。
一、Pandas 是什么?
Pandas(Python Data Analysis Library)是 Python 中最常用的数据分析库,基于 NumPy 构建。
pipinstallpandasimportpandasaspd# 约定俗成别名两大核心数据结构:
- Series:一列数据,带标签(像带索引的 NumPy 数组)
- DataFrame:多列数据的表格(像 Excel 工作表或 SQL 表)
二、Series——带标签的一维数据
importpandasaspdimportnumpyasnp# 从列表创建 Seriess=pd.Series([85,92,78,95])print(s)# 0 85# 1 92# 2 78# 3 95# dtype: int64# 指定索引grades=pd.Series([85,92,78,95],index=["小明","小红","小刚","小丽"],name="成绩")print(grades)# 小明 85# 小红 92# 小刚 78# 小丽 95# Name: 成绩, dtype: int64# 像字典一样访问print(grades["小明"])# 85print(grades[["小明","小丽"]])# 选多个# 小明 85# 小丽 95# Series 的属性print(grades.values)# NumPy 数组 [85 92 78 95]print(grades.index)# Index(['小明', '小红', '小刚', '小丽'])print(grades.dtype)# int64Series 的运算——和 NumPy 一样方便
print(grades+5)# 每人加5分print(grades[grades>80])# 筛选 > 80 的学生print(grades.mean())# 87.5print(grades.describe())# 一键统计摘要# count 4.000000# mean 87.500000# std 7.549834# min 78.000000# max 95.000000三、DataFrame——表格数据的主力
DataFrame 可以理解为多个 Series 的组合,每列可以是不同类型。
# 从字典创建 DataFramedata={"姓名":["小明","小红","小刚","小丽"],"年龄":[18,19,18,20],"城市":["北京","上海","广州","深圳"],"成绩":[85,92,78,95],}df=pd.DataFrame(data)print(df)# 姓名 年龄 城市 成绩# 0 小明 18 北京 85# 1 小红 19 上海 92# 2 小刚 18 广州 78# 3 小丽 20 深圳 95DataFrame 的基本信息
print(df.shape)# (4, 4) 行数, 列数print(df.columns)# Index(['姓名', '年龄', '城市', '成绩'])print(df.index)# RangeIndex(start=0, stop=4, step=1)print(df.dtypes)# 每列的数据类型# 姓名 object# 年龄 int64# 城市 object# 成绩 int64print(df.info())# 综合信息print(df.describe())# 数值列的统计摘要(自动跳过非数值列)# 年龄 成绩# count 4.0 4.00# mean 18.8 87.50# std 1.0 7.55# min 18.0 78.00# max 20.0 95.00四、DataFrame 的索引与选择
这是 Pandas 最常用但容易混淆的部分:
# 方式1:df[列名] —— 选一列print(df["姓名"])# 返回 Seriesprint(df[["姓名","成绩"]])# 选多列,返回 DataFrame# 方式2:df.loc[行标签, 列标签] —— 按标签选print(df.loc[0])# 第一行(Series)print(df.loc[0,"姓名"])# 第一行的姓名(单个值)print(df.loc[0:2,["姓名","成绩"]])# 0-2行,姓名和成绩列# 方式3:df.iloc[行位置, 列位置] —— 按位置选(像 NumPy)print(df.iloc[0,0])# 第一行第一列 → 小明print(df.iloc[:3,[0,3]])# 前3行,第0和第3列# 方式4:布尔索引print(df[df["成绩"]>=85])# 成绩 ≥ 85 的行记忆口诀:
df["列名"]—— 取列df.loc[行, 列]—— 按标签名df.iloc[行, 列]—— 按位置编号
五、添加和删除列/行
# 添加列df["及格"]=df["成绩"]>=60df["成绩等级"]=pd.cut(df["成绩"],bins=[0,60,80,90,100],labels=["D","C","B","A"])print(df)# 删除列df=df.drop("及格",axis=1)# axis=1 表示列# 添加行new_row=pd.Series({"姓名":"小王","年龄":19,"城市":"杭州","成绩":88})df=pd.concat([df,pd.DataFrame([new_row])],ignore_index=True)# 删除行df=df[df["姓名"]!="小刚"]# 删掉小刚# 或 df = df.drop(2) # 删掉索引为2的行六、实战——学生成绩表
# 创建模拟数据df=pd.DataFrame({"姓名":["小明","小红","小刚","小丽","小王"],"语文":[85,92,78,95,88],"数学":[90,88,82,91,86],"英语":[78,95,72,89,92],})# 添加总分和平均分列df["总分"]=df["语文"]+df["数学"]+df["英语"]df["平均分"]=df["总分"]/3df["平均分"]=df["平均分"].round(1)# 按总分排序df=df.sort_values("总分",ascending=False)# 添加排名df["排名"]=range(1,len(df)+1)df=df.reset_index(drop=True)# 重置索引print(df)# 姓名 语文 数学 英语 总分 平均分 排名# 0 小丽 95 91 89 275 91.7 1# 1 小红 92 88 95 275 91.7 2# 2 小王 88 86 92 266 88.7 3# 3 小明 85 90 78 253 84.3 4# 4 小刚 78 82 72 232 77.3 5七、今日学习总结
| 学习内容 | 掌握情况 | 一句话要点 |
|---|---|---|
| Series | ✅ 重点 | 带索引的一维数组,pd.Series(数据, index=索引) |
| DataFrame | ✅ 重点 | 表格数据,pd.DataFrame(字典) |
| df[“列名”] | ✅ 重点 | 取一列或多列 |
| df.loc[行, 列] | ✅ 重点 | 按标签选取 |
| df.iloc[行, 列] | ✅ 重点 | 按位置选取 |
| 布尔索引 | ✅ 重点 | df[df["成绩"] > 80] |
| describe() | ✅ 了解 | 一键统计摘要 |
今日踩坑记录
- loc 和 iloc 的区别:
df.loc[0:2]包含索引2(共3行),df.iloc[0:2]不包含位置2(共2行)。loc 是标签切片,iloc 是位置切片(和 Python 切片一样左闭右开)。 df["列名"]和df.列名的区别:df.列名只有列名是合法 Python 标识符时可用。df["语文 成绩"]这种带空格或中文的只能用方括号。- 修改 DataFrame 要重新赋值:
df.drop("列", axis=1)不改变 df 本身,要df = df.drop(...)或传inplace=True。
八、明天学什么?
今天创建了第一个 DataFrame,明天学 Pandas 的数据读取——如何从 CSV、Excel、JSON 等外部文件中加载数据。
Excel 能做的事,Pandas 都能做——而且能自动化、处理更大数据、和其他工具无缝衔接。DataFrame 是你数据分析的"工作台"。
第36天,打卡完成。明天见!
本系列是个人学习笔记,如有错误欢迎在评论区指正交流。
编程学习
技术分享
实战经验