pandas学习

1. Series类型

Series类型由一组数据及与之相关的数据索引组成

也可以自定义索引:

1.1 初始化

从标量创建:

从字典创建:

从ndarray类型创建:

1.2 基本属性

Series类型包括index和values两部分。

Series类型的操作类似ndarray类型

Series类型的操作类似Python字典类型
可以使用inget等方法

方法分类 语法示例 描述 返回值 是否支持切片/布尔索引
位置索引 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
  1. 优先使用loc/iloc:直接索引[]的行为可能因索引类型不同而变化,明确场景时建议显式使用loc(标签)或iloc(位置)。
  2. 切片差异:
    ○ loc切片为闭区间(包含两端)
    ○ iloc切片为左闭右开(与Python列表一致)
  3. 布尔索引:常用于条件过滤,如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文件

4.3 缺失值的处理

posted @ 2023-11-28 19:13  乐池  阅读(11)  评论(0)    收藏  举报