
Day 36Pandas 入门——Series 与 DataFrameNumPy 处理的是纯数字数组现实数据往往是表格——每列有不同类型还有列名。Pandas 就是为此而生的。今天学 Pandas 的两个核心数据结构。一、Pandas 是什么PandasPython Data Analysis Library是 Python 中最常用的数据分析库基于 NumPy 构建。pipinstallpandasimportpandasaspd# 约定俗成别名两大核心数据结构Series一列数据带标签像带索引的 NumPy 数组DataFrame多列数据的表格像 Excel 工作表或 SQL 表二、Series——带标签的一维数据importpandasaspdimportnumpyasnp# 从列表创建 Seriesspd.Series([85,92,78,95])print(s)# 0 85# 1 92# 2 78# 3 95# dtype: int64# 指定索引gradespd.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(grades5)# 每人加5分print(grades[grades80])# 筛选 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],}dfpd.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(start0, stop4, step1)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 最常用但容易混淆的部分# 方式1df[列名] —— 选一列print(df[姓名])# 返回 Seriesprint(df[[姓名,成绩]])# 选多列返回 DataFrame# 方式2df.loc[行标签, 列标签] —— 按标签选print(df.loc[0])# 第一行Seriesprint(df.loc[0,姓名])# 第一行的姓名单个值print(df.loc[0:2,[姓名,成绩]])# 0-2行姓名和成绩列# 方式3df.iloc[行位置, 列位置] —— 按位置选像 NumPyprint(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)# 删除列dfdf.drop(及格,axis1)# axis1 表示列# 添加行new_rowpd.Series({姓名:小王,年龄:19,城市:杭州,成绩:88})dfpd.concat([df,pd.DataFrame([new_row])],ignore_indexTrue)# 删除行dfdf[df[姓名]!小刚]# 删掉小刚# 或 df df.drop(2) # 删掉索引为2的行六、实战——学生成绩表# 创建模拟数据dfpd.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)# 按总分排序dfdf.sort_values(总分,ascendingFalse)# 添加排名df[排名]range(1,len(df)1)dfdf.reset_index(dropTrue)# 重置索引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(列, axis1)不改变 df 本身要df df.drop(...)或传inplaceTrue。八、明天学什么今天创建了第一个 DataFrame明天学 Pandas 的数据读取——如何从 CSV、Excel、JSON 等外部文件中加载数据。Excel 能做的事Pandas 都能做——而且能自动化、处理更大数据、和其他工具无缝衔接。DataFrame 是你数据分析的工作台。第36天打卡完成。明天见本系列是个人学习笔记如有错误欢迎在评论区指正交流。