pandas学习
1. Series类型
Series类型由一组数据及与之相关的数据索引组成

也可以自定义索引:

1.1 初始化
从标量创建:

从字典创建:


从ndarray类型创建:

1.2 基本属性
Series类型包括index和values两部分。


Series类型的操作类似ndarray类型
Series类型的操作类似Python字典类型
可以使用in
、get
等方法

方法分类 | 语法示例 | 描述 | 返回值 | 是否支持切片/布尔索引 |
---|---|---|---|---|
位置索引 | s.iloc[0] |
通过整数位置访问(从0开始) | 标量值 | 是 |
s.iloc[1:3] |
位置切片(左闭右开) | Series | ||
标签索引 | s.loc['a'] |
通过索引标签访问 | 标量值 | 是 |
s.loc[['a','b']] |
通过标签列表访问 | Series | ||
直接索引 | s[0] |
类似iloc(当索引非整数时可能混淆) | 标量值/Series | 是 |
s['a'] |
类似loc(优先标签索引) | |||
布尔索引 | s[s > 3] |
通过布尔条件筛选 | Series | 是 |
s[~(s > 3)] |
取反条件 | |||
函数访问 | s.at['a'] |
快速访问单个标签(类似loc但效率更高) | 标量值 | 否 |
s.iat[0] |
快速访问单个位置(类似iloc但效率更高) | |||
头部/尾部 | s.head(3) |
访问前N行(默认5) | Series | 否 |
s.tail(2) |
访问后N行(默认5) | |||
取唯一值 | s.unique() |
返回唯一值数组 | ndarray | 否 |
值计数 | s.value_counts() |
统计各值出现次数 | Series |
- 优先使用loc/iloc:直接索引[]的行为可能因索引类型不同而变化,明确场景时建议显式使用loc(标签)或iloc(位置)。
- 切片差异:
○ loc切片为闭区间(包含两端)
○ iloc切片为左闭右开(与Python列表一致) - 布尔索引:常用于条件过滤,如s[s > 3 & s < 10]。
Series对象和索引都可以有一个名字,存储在属性.name中

1.3 常用方法
用途分类 | 方法 | 说明 | 示例代码 |
---|---|---|---|
数据预览 | head() | 查看前 n 行数据,默认 5 行 | s.head(3) |
数据预览 | tail() | 查看后 n 行数据,默认 5 行 | s.tail(2) |
条件判断 | isin() | 判断元素是否包含在参数集合中 | s.isin([1, 2]) |
缺失值处理 | isna() | 判断是否为缺失值(如 NaN 或 None) | s.isna() |
聚合统计 | sum() | 求和,自动忽略缺失值 | s.sum() |
聚合统计 | mean() | 平均值 | s.mean() |
聚合统计 | min() | 最小值 | s.min() |
聚合统计 | max() | 最大值 | s.max() |
聚合统计 | var() | 方差 | s.var() |
聚合统计 | std() | 标准差 | s.std() |
聚合统计 | median() | 中位数 | s.median() |
聚合统计 | mode() | 众数(可返回多个) | s.mode() |
聚合统计 | quantile(q) | 分位数,q 取 0~1 之间 | s.quantile(0.25) |
聚合统计 | describe() | 常见统计信息(count、mean、std、min、25%、50%、75%、max) | s.describe() |
频率统计 | value_counts() | 每个唯一值的出现次数 | s.value_counts() |
频率统计 | count() | 非缺失值数量 | s.count() |
频率统计 | nunique() | 唯一值个数(去重) | s.nunique() |
唯一处理 | unique() | 获取去重后的值数组 | s.unique() |
唯一处理 | drop_duplicates() | 去除重复项 | s.drop_duplicates() |
抽样分析 | sample() | 随机抽样 | s.sample(2) |
排序操作 | sort_index() | 按索引排序 | s.sort_index() |
排序操作 | sort_values() | 按值排序 | s.sort_values() |
替换值 | replace() | 替换值 | s.replace({1: 100}) |
转换结构 | to_frame() | 将 Series 转为 DataFrame | s.to_frame() |
比较判断 | equals() | 判断两个 Series 是否完全相等 | s1.equals(s2) |
信息提取 | keys() | 返回 Series 的索引对象 | s.keys() |
统计关系 | corr() | 计算相关系数(默认皮尔逊) | s1.corr(s2) |
统计关系 | cov() | 协方差 | s1.cov(s2) |
可视化 | hist() | 绘制直方图(需安装 matplotlib) | s.hist() |
遍历操作 | items() | 返回索引和值的迭代器 | for i, v in s.items(): print(i, v) |
1.4 对齐操作
Series类型在运算中会自动对产不同索引的数据。当多个series对象之间进行运算的时候,如果不同series之间具有不同的索引值,那么运算会自动对齐不同索引值的数据,如果某个series没有某个索引值,那么最终结果会赋值为NaN。

1.5 修改
Series对象可以随时修改并即刻生效

2. DataFrame类型
DataFrame 是 Pandas 中的核心数据结构之一,多行多列表格数据,类似于 Excel 表格 或 SQL 查询结果。
它是一个 二维表格结构,具有行索引(index)和列标签(columns)。
每一列都是一个series
DataFrame类型由共用相同索引的一组列组成
DataFrame是一个表格型的数据类型,每列值类型可以不同
DataFrame既有行索引、也有列索引
DataFrame常用于表达二维数据,但可以表达多维数据。
2.1 初始化
x1 = pd.Series([1, 2, 3, 4, 5])
x2 = pd.Series([6, 7, 8, 9, 10])
df = pd.DataFrame({'A': x1, 'B': x2})
print(df) # 创建DataFrame
print(df.dtypes) # 查看数据类型
# 通过字典创建
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, 27, 22, 32],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])
print(df)
从二维ndarray对象创建

从一维ndarray对象字典创建

从列表类型的字典创建

例:

上例中,若要取出某行某列

2.2 常用方法与统计
方法 | 说明 |
---|---|
head() |
查看前n行数据,默认5行 |
tail() |
查看后n行数据,默认5行 |
isin() |
元素是否包含在参数集合中 |
isna() |
元素是否为缺失值 |
sum() |
求和 |
mean() |
平均值 |
min() |
最小值 |
max() |
最大值 |
var() |
方差 |
std() |
标准差 |
median() |
中位数 |
mode() |
众数 |
quantile() |
指定位置的分位数,如quantile(0.5) |
describe() |
常见统计信息 |
info() |
基本信息 |
value_counts() |
每个元素的个数 |
count() |
非空元素的个数 |
drop_duplicates() |
去重 |
sample() |
随机采样 |
replace() |
用指定值代替原有值 |
equals() |
判断两个DataFrame是否相同 |
cummax() |
累计最大值 |
cummin() |
累计最小值 |
cumsum() |
累计和 |
cumprod() |
累计积 |
diff() |
一阶差分,对序列中的元素进行差分运算,也就是用当前元素减去前一个元素得到差值,默认情况下,它会计算一阶差分,即相邻元素之间的差值。 参数: - periods :整数,默认为 1。表示要向前或向后移动的周期数,用于计算差值。正数表示向前移动,负数表示向后移动。- axis :指定计算的轴方向。0 或 'index' 表示按列计算,1 或 'columns' 表示按行计算,默认值为 0。 |
sort_index() |
按行索引排序 |
sort_values() |
按某列的值排序,可传入列表来按多列排序,并通过ascending参数设置升序或降序 |
nlargest() |
返回某列最大的n条数据 |
nsmallest() |
返回某列最小的n条数据 |
示例:
import pandas as pd
df = pd.DataFrame(data={"id": [101, 102, 103,104,105,106,101], "name": ["张三", "李四", "王五","赵六","冯七","周八","张三"], "age": [10, 20, 30, 40, None, 60,10]},index=["aa", "bb", "cc", "dd", "ee", "ff","aa"])
# head() 查看前n行数据,默认5行
print(df.head())
# tail() 查看后n行数据,默认5行
print(df.tail())
# isin() 元素是否包含在参数集合中
print(df.isin([103,106]))
# isna() 元素是否为缺失值
print(df.isna())
# sum() 求和
print(df["age"].sum())
# mean() 平均值
print(df["age"].mean())
# min() 最小值
print(df["age"].min())
# max() 最大值
print(df["age"].max())
# var() 方差
print(df["age"].var())
# std() 标准差
print(df["age"].std())
# median() 中位数
print(df["age"].median())
# mode() 众数
print(df["age"].mode())
# quantile() 指定位置的分位数,如quantile(0.5)
print(df["age"].quantile(0.5))
# describe() 常见统计信息
print(df.describe())
# info() 基本信息
print(df.info())
# value_counts() 每个元素的个数
print(df.value_counts())
# count() 非空元素的个数
print(df.count())
# drop_duplicates() 去重 duplicated()判断是否为重复行
print(df.duplicated(subset="age"))
# sample() 随机采样
print(df.sample())
# replace() 用指定值代替原有值
print("----------------")
print(df.replace(20,"haha"))
# cummax() 累计最大值
df3 = pd.DataFrame({'A': [2, 5, 3, 7, 4],'B': [1, 6, 2, 8, 3]})
# 按列 等价于axis=0 默认
print(df3.cummax(axis="index"))
# 按行 等价于axis=1
print(df3.cummax(axis="columns"))
# cummin() 累计最小值
print(df3.cummin())
# cumsum() 累计和
print(df3.cumsum())
# cumprod() 累计积
print(df3.cumprod())
# diff() 一阶差分
print(df3.diff())
# sort_index() 按行索引排序
print(df.sort_index())
# sort_values() 按某列的值排序,可传入列表来按多列排序,并通过ascending参数设置升序或降序
print(df.sort_values(by="age"))
# nlargest() 返回某列最大的n条数据
print(df.nlargest(n=2,columns="age"))
# nsmallest() 返回某列最小的n条数据
print(df.nsmallest(n=1,columns="age"))
3. 数据类型操作
3.1 重新索引
.reindex()能够改变或重排Series和DataFrame索引

.reindex(index=None,columns=None,...)的参数

例如新增一列:

3.2 索引类型
索引类型的常用方法

例:删除一列,添加一行c0,且由c1填充而来

3.3 删除指定索引对象
.drop()能够删除Series和DataFrame指定行或列索引
默认修改0轴元素,如果有要求可使用axis=某数

4. 数据分析
4.1 数据分析的完整流程
数据收集 -> 数据清洗 -> 数据分析 -> 数据可视化
4.2 数据的导入导出
import pandas as pd
df = pd.read_csv('data/employees.csv')
df.head()
# 导出
df_tail = df.tail()
df_tail.to_csv('data/employees_tail.csv')
# json
df = pd.read_json('data/data1.json')
print(df) # 简单的json文件
import json
with open('data/test.json', 'r', encoding='utf-8') as f: # 使用 open 函数打开文件,json.load 读取文件内容并解析为 Python 对象
data = json.load(f)
print(type(data)) # 是字典
df = pd.DataFrame(data['users'])
df # 复杂的json文件