数据分析库 Pandas
对于Pandas的简单认识和基本操作的练习
对于Pandas的简单认识和基本操作的练习 对于函数以及相关参数进行总结和介绍
一 介绍
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的库。
Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于 Excel 表格)。
Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。
Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。
主要数据结构
Pandas主要引入了两种新的数据结构:DataFrame 和 Series。
Series:类似于一维数组或列表,是由一组数据以及与之相关的数据标签(索引)构成。Series 可以看作是 DataFrame 中的一列,也可以是单独存在的一维数据结构。
DataFrame:类似于一个二维表格,是 Pandas 中最重要的数据结构。DataFrame 可以看作是由多个 Series 按列排列构成的表格,它既有行索引也有列索引,因此可以方便地进行行列选择、过滤、合并等操作。
常用函数和参数介绍
📋基本数据结构
| 类别 | 方法/函数 | 主要参数 | 使用场景 | 示例代码 |
|---|---|---|---|---|
| 创建数据结构 | pd.DataFrame() |
data: 字典/列表数据columns: 列名index: 行索引 |
创建数据框 | df = pd.DataFrame({'A': [1,2], 'B': ['x','y']}) |
| 数据查看 | head()/tail() |
n: 显示行数 |
查看头尾数据 | df.head(3) |
| 信息概览 | info() |
memory_usage: 显示内存 |
数据结构概况 | df.info() |
| 描述统计 | describe() |
include: 包含数据类型percentiles: 百分位数 |
统计摘要 | df.describe(include='all') |
| 数据选取 | loc[] |
row_indexer, col_indexer |
按标签选取 | df.loc[1:5, ['A','B']] |
| 数据选取 | iloc[] |
row_indexer, col_indexer |
按位置选取 | df.iloc[1:5, 0:2] |
| 条件筛选 | query() |
expr: 查询表达式 |
复杂条件筛选 | df.query('A > 5 & B == "x"') |
| 排序 | sort_values() |
by: 排序列ascending: 升降序 |
值排序 | df.sort_values(by='A', ascending=False) |
🔧数据处理与清洗
| 类别 | 方法/函数 | 主要参数 | 使用场景 | 示例代码 |
|---|---|---|---|---|
| 缺失值处理 | isna() |
- | 检测缺失值 | df.isna().sum() |
| 缺失值处理 | fillna() |
value: 填充值method: 填充方式 |
填充缺失值 | df.fillna(0) |
| 缺失值处理 | dropna() |
axis: 轴how: 条件 |
删除缺失值 | df.dropna(how='any') |
| 重复值处理 | duplicated() |
subset: 列子集 |
检测重复值 | df.duplicated() |
| 重复值处理 | drop_duplicates() |
subset: 列子集keep: 保留策略 |
删除重复值 | df.drop_duplicates() |
| 数据转换 | astype() |
dtype: 目标类型 |
数据类型转换 | df['A'] = df['A'].astype(float) |
| 应用函数 | apply() |
func: 应用函数 |
行列自定义操作 | df.apply(lambda x: x**2) |
| 分箱离散化 | cut() |
x: 分箱数据bins: 箱子数 |
连续值离散化 | pd.cut(df['A'], bins=5) |
| 数据替换 | replace() |
to_replace: 被替换值value: 替换值 |
值替换 | df.replace({'x': 'y'}) |
🔍数据聚合与分组
| 类别 | 方法/函数 | 主要参数 | 使用场景 | 示例代码 |
|---|---|---|---|---|
| 分组聚合 | groupby() |
by: 分组键as_index: 分组键作索引 |
创建分组对象 | df.groupby('B') |
| 聚合计算 | agg() |
func: 聚合函数 |
应用聚合函数 | df.groupby('B')['A'].agg(['mean', 'sum']) |
| 透视表 | pivot_table() |
values: 值列index: 行分组columns: 列分组 |
创建透视表 | pd.pivot_table(df, values='A', index='B', aggfunc='mean') |
| 交叉表 | crosstab() |
index: 行类别columns: 列类别 |
频率交叉表 | pd.crosstab(df['B'], df['C']) |
| 合并数据 | merge() |
left/right: 合并对象on: 键 |
SQL风格连接 | pd.merge(df1, df2, on='key') |
| 连接数据 | concat() |
objs: 对象列表axis: 连接轴 |
堆叠数据 | pd.concat([df1, df2], axis=1) |
📅 时间序列处理
| 类别 | 方法/函数 | 主要参数 | 使用场景 | 示例代码 |
|---|---|---|---|---|
| 转换时间戳 | to_datetime() |
arg: 时间数据format: 时间格式 |
转换为时间戳 | pd.to_datetime(df['date']) |
| 时间序列重采样 | resample() |
rule: 频率规则 |
时间序列采样 | df.resample('M').mean() |
| 移动窗口 | rolling() |
window: 窗口大小 |
滚动计算 | df['A'].rolling(7).mean() |
| 时间移位 | shift() |
periods: 移动步数 |
滞后/超前 | df['A'].shift(1) |
💾 I/O 操作
| 类别 | 方法/函数 | 主要参数 | 使用场景 | 示例代码 |
|---|---|---|---|---|
| 读取CSV | read_csv() |
filepath: 路径sep: 分隔符index_col: 索引列 |
读取CSV文件 | pd.read_csv('data.csv', sep=';') |
| 写入CSV | to_csv() |
path: 路径index: 是否保存索引 |
导出CSV | df.to_csv('output.csv', index=False) |
| Excel读取 | read_excel() |
io: Excel路径sheet_name: 工作表 |
读取Excel | pd.read_excel('data.xlsx', sheet_name='Sheet1') |
| Excel写入 | to_excel() |
excel_writer: Excel路径 |
导出Excel | df.to_excel('output.xlsx') |
二 使用
Series
索引:每一个Series都有一个索引,可以是整数,字符串,日期等类型,如果没有显示指定索引,Pandas会默认自动创建一个从0开始的整数索引
数据类型:Series可以容纳不同数据类型的元素,包括整数,浮点数,字符串等
# series
#创建
#可以通过pd.Series()构造器创建 也可以传递一个数据数据加一个可选的索引数组
import pandas as pd
a = [1,2,3,4]
b = pd.Series(a)
time = ['23年','24年','25年','26年']
date = [100,200,300,400]
c = pd.Series(date,time)
print(c)
sites = {1:"0012",2:"0013",3:"0014",4:"0015"}
d = pd.Series(sites)
print(d)
var = pd.Series(sites,index=[1,3]) # 按照索引去获取数组
print(var)
DataFrame
列和行:DataFrame 由多个列组成,每一列都有一个名称,可以看作一个Series 同时还存在有行索引
二维结构:DataFrame 是一个二维表格 具有行和列 可以视为多个Series对象组成的字典
列的数据类型:不同的列可以包含不同的数据类型 例如整数 浮点型 字符串
创建方式
import pandas as pd
# 字典嵌套列表创建
sites = {"web_name":["Google","Baidu","SH"],"age":[1,3,9]}
var = pd.DataFrame(sites)
var
import pandas as pd
# 使用Series创建
data = {
"name":pd.Series(["一","二","三"]),
"age":pd.Series([21,22,23]),
"money":pd.Series([21.2,22.2,23.2])
}
data = pd.DataFrame(data)
data
文件处理
import pandas as pd
# csv数据读取
gender = pd.read_csv(r"D:\Study Note\Python_note\Pandas\gender_submission.csv")
gender
import pandas as pd
# JSON数据读取
JSON_Test = pd.read_json(r"D:\Study Note\Python_note\Pandas\test.json")
JSON_Test
保存为文件
import pandas as pd
# 数据
data = {
"name":pd.Series(["张三","李四","王五"]),
"age":pd.Series([21,22,23]),
"money":pd.Series([21.2,22.2,23.2])
}
# 将数据转换为DataFrame
data = pd.DataFrame(data)
# 将DATa Frame写入Excel文件中
data.to_excel('test.xlsx',index=False)
print("Excel文件生成成功")
常用函数
| 函数 | 用法 |
| pd.merge() | 实现数据合并 |
| pd.concat() | 将多个数据框沿着某个轴进行连接 |
| loc[]和iloc[] | 对数据进行索引和选择 |
| drop() | 删除某些列或行 |
| isnull() | 检查失值并使用 |
| fillna() | 填充缺失值 |
| sort_values() | 排序 |
import pandas as pd
df = pd.read_csv(r"D:\Study Note\Python_note\Pandas\test.csv")
# df.head()
# 设置编号 方便筛查
df.set_index('PassengerId',inplace=True)
# 获取单个值
a = df.loc[900,'Name']
# 获取一个Series
b = df.loc[900,['Sex','Age']]
# 得到DataFrame
c = df.loc[[896,897,900],["Name","Sex","Age"]]
# 行列按区间查询
d = df.loc[896: 905,"Name":"Age"]
# 布尔查询
f = df.loc[df["Age"] < 18,:]
# 条件查询
g = df.loc[(df["Age"]<=30) & (df["Age"]>=18) & (df["Sex"] == "male"),:]
# 新增列查询
h = df.loc[:,"Year"] = df["Age"] + 2025
df.head()
# 统计函数
# 查看单个Series的数据
df["Age"].mean()
# 最大值
df["Age"].max()
# 最小值
df["Age"].min()
# 按值计数
df["Sex"].value_counts()
# 去重
df["Age"].unique()
# 缺失值处理
stu = pd.read_excel(r"D:\Study Note\Python_note\Pandas\test.xlsx",skiprows = 2)
# 检查空值
stu.isnull()
stu["name"].notnull()
# 排序
df2 = pd.read_csv(r"D:\Study Note\Python_note\Pandas\gender_submission.csv")
df2.sort_values("Age",ascending=False)
学习时间 2025年07月12日
更多推荐
所有评论(0)