1.引言
pandas是专门为数据分析任务而生的库,你看是专业的!其中纳入了大量的库和标准数据模型,提供高效操作数据集所需工具,以及便捷处理数据的函数和方法。pandas支持丰富的数据结构,比如:
- 一维数组Series,对应于python中的列表List,深度学习中向量
- 二维型表格数据结构DataFrame
- 三维面板数组Panel
- 甚至四维Panel4D
等等。像当下大模型背后的机器学习,深度学习数据处理阶段,需要大量使用pandas库进行数据预处理。今天我们通过这篇文章,争取搞清楚pandas常见玩法。
2.案例
2.1.环境准备
老规矩,使用pandas需要安装,同时在安装的时候,建议同步安装numpy库和matplotlib库,方便数据计算和可视化操作
pip install pandas numpy matplotlib
2.2.认识核心数据结构
2.2.1.一维数组
import pandas as pd
# 一维数组
s = pd.Series([1,3,6,9])
print(s)
指定数组索引和名称
import pandas as pd
# 一维数组
s = pd.Series([1,3,6,9], index=['a','b','c','d'],name='series1')
print(s)
常用方法:
import pandas as pd
# 一维数组
s = pd.Series([1,3,6,9], index=['a','b','c','d'],name='series1')
# 常用方法
print(s.describe()) # 统计摘要
print(s.value_counts()) # 值计数
print(s.apply(lambda x: x**2)) # 应用函数
2.2.2.二维表格
# 二维表格
data = {
'name':['李雷','韩梅梅','小王'],
'age':[18,19,20],
'sex':['男','女','男']
}
df = pd.DataFrame(data)
print(df)
添加列:
删除列:
2.3.数据读写
2.3.1.准备一份示例数据
import pandas as pd
import os
# 准备示例数据
os.makedirs(os.path.join('.','data'), exist_ok=True)
data_file = os.path.join('.','data','house_tiny.csv')
with open(data_file,'w') as f:
f.write('NumRooms,Alley,Price\n')
f.write('NA,Pave,127500\n')
f.write('2,NA,106000\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')
2.3.2.数据预览
import pandas as pd
import os
# 加载文件
data_file = os.path.join('.','data','house_tiny.csv')
df = pd.read_csv(data_file)
# 数据预览
print(df.head(2)) # 前2行
print(df.tail()) # 最后5行
print(df.sample(3)) # 随机3行
print(df.describe()) # 数值列统计
print(df.info()) # 数据结构信息
2.3.3.读写数据
import pandas as pd
import os
# 加载文件
data_file = os.path.join('.','data','house_tiny.csv')
df = pd.read_csv(data_file)
# 读写数据
print(df)
# 保存为新文件
df.to_csv(os.path.join('.','data','house_tiny_new.csv'),index=False)
2.4.数据清洗
2.4.1.处理缺失值
import pandas as pd
import numpy as np
# 创建含缺失值的数据
data = {
"姓名": ["张三", "李四", None, "王五"],
"年龄": [25, np.nan, 28, 35],
"部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)
# 检测缺失值
print(df.isnull().sum())
# 填充缺失值
df["年龄"].fillna(df["年龄"].mean(), inplace=True) # 均值填充
df["部门"].fillna("未知", inplace=True) # 固定值填充
print(df)
2.4.2.处理重复值
import pandas as pd
import numpy as np
# 创建含缺失值的数据
data = {
"姓名": ["张三", "李四", None, "王五"],
"年龄": [25, np.nan, 28, 35],
"部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)
# 处理重复值
# 添加重复数据
print("添加重复行:")
df = df._append(df.iloc[0])
print(df)
print("标记重复行:")
print(df.duplicated()) # 标记重复行
print("删除重复行:")
df.drop_duplicates(inplace=True) # 删除重复行
print(df)
2.5.数据进阶操作
2.5.1.数据筛选
import pandas as pd
import numpy as np
# 创建含缺失值的数据
data = {
"姓名": ["张三", "李四", None, "王五"],
"年龄": [25, np.nan, 28, 35],
"部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)
# 数据筛选
print(df[df["年龄"] > 30]) # 年龄大于30岁
print(df[(df["部门"] == "技术") & (df["年龄"] > 25)]) # 复合条件
# 使用query方法
print(df.query("年龄 < 30 and 部门 == '销售'"))
2.5.2.数据排序
import pandas as pd
import numpy as np
# 创建含缺失值的数据
data = {
"姓名": ["张三", "李四", None, "王五"],
"年龄": [25, np.nan, 28, 35],
"部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)
# 数据排序
df.sort_values(by=["姓名", "年龄"],
ascending=[False, True],
inplace=True)
print(df)
2.5.3.分组聚合
import pandas as pd
import numpy as np
# 创建含缺失值的数据
data = {
"姓名": ["张三", "李四", None, "王五"],
"年龄": [25, np.nan, 28, 35],
"部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)
# 分组聚合
# 按部门分组统计
group = df.groupby("部门")
print(group.agg({
"年龄": ["mean", "max", "min"]
}))