一、Pandas基础
Pandas是Python的一个数据分析包,用于数据操作和分析,拥有灵活和表达力强的数据结构,提供了大量的快速便捷的处理数据的函数和方法。
- 常用数据结构说明:
- Series:一维数组,与Numpy中的一维array类似,可以保存不同种数据类型,包括字符串、boolean值、数字等。
- Time-Series:以时间为索引的Series。
- DataFrame:二维的表格型数据结构,可以将DataFrame理解为Series的容器。
- Panel :三维的数组,可以理解为DataFrame的容器。
二、核心数据结构
1.声明一个一维带标签的数组(类似字典)
import pandas as pds s = pd.Series([3, 6, 9], index=['a', 'b', 'c'])
输出结果:
a 3 b 6 c 9 dtype: int64
2.声明一个二维表格(类似Excel)
data = { 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['NY', 'Paris', 'London'] } df = pd.DataFrame(data)
输出结果:
| Name | Age | City | |
| 0 | Alice | 25 | NY |
| 1 | Bob | 30 | Paris |
| 2 | Charlie | 35 | London |
三、基础操作
1.查看数据
df.head(2) # 前2行 df.tail(1) # 最后1行 df.shape # 维度 (3, 3) df.info() # 数据类型和内存 df.describe() # 数值列统计摘要 df.columns # 显示所有列 df.values # 显示所有值
2.选择数据
df['Name'] # 单列 → Series df[['Name', 'City']] # 多列 → DataFrame df.iloc[0] # 第一行(按位置) df.loc[0, 'Age'] # 第一行的Age值(按标签)
3.过滤数据
df[df['Age'] > 25] # Age大于25的行 df.query("City == 'Paris'") # 使用query方法
4.处理缺失值
df.dropna() # 删除含NaN的行 df.fillna(0) # 将NaN替换为0
注意:此示例中导入了numpy包,声明了一个为NaN的数据列,进行效果演示
四、数据操作
1. 新增列
df['Salary'] = [70000, 80000, 90000] # 添加新列
2. 分组聚合
df.groupby('City')['Age'].mean() # 按城市分组计算平均年龄
3.排序
df.sort_values('Age', ascending=False) # 按年龄降序
4.数据转置
数据转置是一种常见的数据处理操作,指将数据表的行列互换(即行变列、列变行),需加深印象,画重点!
df.T # 数据转置
- 转置的主要应用场景:
- 矩阵运算:
- 在进行线性代数运算时,如矩阵乘法,转置操作是必不可少的
- 转置后的矩阵可以简化某些数学运算过程
- 数据可视化:
- 在做数据报表展示时,转置数据可以更直观地展示在图表中
- 以不同视角呈现数据:例如学生成绩数据,转置前适合查看每个学生的成绩情况,转置后则便于观察每个学科的学习情况
此处只做初步了解,后续遇到详细实际场景再详细说明;
五、I/O操作
1.读写文件
# 读取CSV/Excel/SQL df = pd.read_csv('data.csv') df = pd.read_excel('data.xlsx') # 保存数据 df.to_csv('new_data.csv', index=False)
六、常用函数
df.rename() #重命名列名 df.drop() #删除行/列 pd.concat() #合并多个DataFrame df.merge() #数据库风格的合并
merge函数
merge函数需要重点关注,今天的实例中也会用到,主要用于合并两个数据集(如DataFrame),支持多种连接方式(如内连接、左连接、右连接、外连接),类似数据库查询的Left jion,Right Join ,Inner Join
- 基本用途:
- merge函数通过公共列(键)将两个数据集横向合并,类似于SQL中的JOIN操作。其核心参数包括:
- left/right:待合并的两个数据集
- on:指定连接的列名,需在两个数据集中存在
- how:定义连接方式(默认为inner,其他选项包括left、right、outer)
- 连接类型:
- 内连接(inner):仅保留键列匹配的行(交集)。
- 左连接(left):保留左侧数据集所有行,右侧匹配缺失值填充NaN。
- 右连接(right):保留右侧数据集所有行,左侧匹配缺失值填充NaN。
- 外连接(outer):保留所有行,未匹配部分填充NaN。
- 高级用法:
- 多列匹配:通过on指定多列作为复合键。
- 自定义列名:若列名不同,可使用left_on和right_on分别指定。
- 处理重复列:合并后相同列名自动添加后缀(如.x、.y)
七、Excel操作实例
初步了解了Pandas的常规用法,下面结合CodeBuddy看一个Excel数据集的操作实例,项目中有两个Excel文档,分别是“员工基本信息表.xlsx”、“员工绩效表.xlsx”
打开CodeBuddy,发送指令:
"编写Python,打开 员工基本信息表.xlsx 和 员工绩效表.xlsx,读取前5行数据"
生成了read_excel.py文件,仔细看看用到了哪些函数,确认输出结果是否符合预期;
import pandas as pd # 读取员工基本信息表的前5行 def read_employee_info(): try: df = pd.read_excel('员工基本信息表.xlsx', nrows=5) print("员工基本信息表的前5行数据:") print(df) except Exception as e: print(f"读取员工基本信息表时出错: {e}") # 读取员工绩效表的前5行 def read_employee_performance(): try: df = pd.read_excel('员工绩效表.xlsx', nrows=5) print("员工绩效表的前5行数据:") print(df) except Exception as e: print(f"读取员工绩效表时出错: {e}") if __name__ == "__main__": read_employee_info() read_employee_performance()
如果都没有问题,下达第二条指令:
“编写Python,在员工基本信息表.xlsx 的基础上,增加该员工 2024年第4季度的绩效,存到新的 .xlsx”
CodeBuddy的思考过程:
执行过程:
执行完毕后,生成了新的add_performance.py文件和员工信息及绩效表.xlsx文件
员工信息表的前后对比:
新生成的add_performance.py文件:
import pandas as pd import numpy as np # 读取员工基本信息表 def read_employee_info(): try: df = pd.read_excel('员工基本信息表.xlsx') print("员工基本信息表读取成功!") return df except Exception as e: print(f"读取员工基本信息表时出错: {e}") return None # 添加2024年第4季度绩效数据 def add_performance_data(df): if df is not None: # 假设绩效数据为随机生成(范围:1.0-5.0) np.random.seed(42) # 确保结果可复现 df['2024年第4季度绩效'] = np.random.uniform(1.0, 5.0, size=len(df)).round(2) print("绩效数据添加完成!") return df else: print("无法添加绩效数据:员工信息为空!") return None # 保存到新文件 def save_to_new_file(df): if df is not None: new_file = '员工信息及绩效表.xlsx' df.to_excel(new_file, index=False) print(f"数据已保存到 {new_file}") else: print("无法保存:数据为空!") if __name__ == "__main__": employee_df = read_employee_info() employee_with_performance = add_performance_data(employee_df) save_to_new_file(employee_with_performance)
文内涉及到numpy的一些知识点,可以先行了解,自我扩展,举一反三,查漏补缺,后续将会结合案例详细讲解!