Pandas基础(一)
一、本课目标
- 了解Pandas的应用和特点
- 掌握Pandas的安装
- 掌握Series的特点和使用
二、Pandas简介
- Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的一个扩展程序库
- Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)
- Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析
- Pandas 名字衍生自术语 “panel data”(面板数据)和 “Pythondata analysis”(Python 数据分析)
- Pandas 是一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)
三、Pandas 应用-1
- 金融领域:金融机构使用 Pandas 来处理和分析股票市场数据、财务数据、交易数据等。Pandas 的灵活性和高效性使得金融分析师能够快速进行数据清洗、统计分析、建模等工作
- 科学研究:科学研究领域经常涉及大量的实验数据、观测数据等,Pandas 提供了强大的工具来处理和分析这些数据,例如天文学、生物学、地球科学等领域
- 企业数据分析:各种企业和组织都需要对业务数据进行分析,以支持决策和战略规。Pandas 提供了处理和分析企业数据的功能,包括销售数据、客户数据、运营数据等
- 社交媒体分析:社交媒体平台产生的海量数据需要进行分析来了解用户行为、趋势和情感倾向。Pandas 可以帮助分析师处理和分析社交媒体数据,进行用户行为分析、情感分析等
四、Pandas 应用-2
- 医疗保健:医疗保健领域需要处理和分析大量的医疗数据,包括患者数据、临床试验数据、医疗图像数据等。Pandas 提供了处理和分析这些数据的工具,支持医疗研究和临床决策
- 教育研究:教育领域可以利用 Pandas 来处理学生表现数据、教学评估数据、课程数据等,从而进行教育研究和改进教学质量
- 市场营销:市场营销专业人员可以使用 Pandas 分析市场数据、客户数据、广告数据等,以制定营销策略和优化市场活动效果
五、Pandas特点
- 处理各种数据结构,尤其是表格型数据,如 SQL 数据库或 Excel 表格
- 数据结构:Series 和 DataFrame
- 数据加载与保存:可以从各种数据源加载数据,包括 CSV 文件、Excel 表格、SQL数据库、JSON 文件等,并且可以将处理后的数据保存到这些格式中
- 数据清洗与转换:提供了丰富的函数和方法,用于数据清洗、处理缺失值、重复值、异常值等,以及进行数据转换、重塑和合并操作
- 数据分析与统计:提供了各种统计函数和方法,用于描述性统计、聚合操作、分组运算、透视表等数据分析任务
- 数据可视化:结合 Matplotlib 库,可以进行数据可视化,绘制各种统计图表,如折线图、散点图、直方图等
六、数据结构
- 主要数据结构是
- Series (一维数据)
- DataFrame(二维数据)
- Series 是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签(即索引)组成
- DataFrame 是一个表格型的数据结构,它含有一组有序的列,既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)
七、Series
- 类似于一维数组或列表,是由一组数据以及与之相关的数据标签(索引)构成
八、DataFrame
- 类似于一个二维表格,是 Pandas 中最重要的数据结构。可以看作是由多个 Series 按列排列构成的表格,它既有行索引也有列索引,因此可以方便地进行行列选择、过滤、合并等操作
九、Pandas安装
- Pandas 是一个基于 Python 的库
- 使用 pip 安装 pandas:
- pip install pandas
- 安装成功后,我们就可以导入 pandas 模块使用:
- import pandas as pd
十、Series特点
- 一维数组:只有一个轴(或维度),类似于 Python 中的列表
- 索引: 每个 Series 都有一个索引,可以是整数、字符串类型,如果不指定索引,默认创建一 个从 0 开始的整数索引
- 数据类型: Series 可以容纳不同数据类型的元素,包括整数、浮点数、字符串、Python 对象等
- 操作:Series 支持各种操作,如数学运算、统计分析、字符串处理等
- 缺失数据:Series 可以包含缺失数据,使用NaN来表示缺失或无值
十一、创建Series
- 使用 Series() 构造函数创建 Series 对象,传递一个数据数组和一个可选的索引数组
- 使用列表创建 Series
- s = pd.Series([1, 2, 3, 4])
- 使用 NumPy 数组创建 Series
- s = pd.Series(np.array([1, 2, 3, 4]))
- 使用字典创建 Series
- s = pd.Series({‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: 4})
import pandas as pd
import numpy as np
print(pd.__version__)
''' 2.2.2 '''
s = pd.Series(['aa', 'bb', 'cc'])
print(s)
print(type(s))
print(s.dtype)
s = pd.Series(np.arange(10))
print(s)
s = pd.Series({'a':11, 'c':33, 'b':44})
print(s['a'])
十二、基本操作-1
- 创建 Series 并指定索引
- s = pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])
- 获取单个值
- print(s[‘a’]) # 返回索引标签 ‘a’ 对应的元素
- print(s[0])
- 获取多个值
- print(s[‘a’:‘c’]) # 返回索引标签 ‘a’ 到 ‘c’ 之间的元素
- print(s[0:3])
- 索引和值的对应关系
- for index, value in s.items():
- print(f"Index: {index}, Value: {value}")
- for index, value in s.items():
s = pd.Series(data = [1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])
print(s)
print(s['a'])
print(s[0])
print(s[1:2])
print(s['a':'c'])
for v in s:
print(v)
for v in s.values:
print(v)
for i in s.index:
print(i)
for i, v in s.items():
print(i, v)
print(type(s.values))
print(type(s.index))
print(type(s.items()))
十三、基本操作-2
- 使用切片语法来访问 Series 的一部分
- print(s[:3]) # 返回前三个元素
- 为特定的索引标签赋值
- s[‘a’] = 10 # 将索引标签 ‘a’ 对应的元素修改为 10
- 通过赋值给新的索引标签来添加元素
- s[‘e’] = 5 # 在 Series 中添加一个新的元素,索引标签为 ‘e’
- 使用 del 删除指定索引标签的元素。
- del s[‘a’] # 删除索引标签 ‘a’ 对应的元素
- 使用 drop 方法删除一个或多个索引标签,并返回一个新的 Series。
- s_dropped = s.drop([‘a’,‘b’]) # 返回一个删除了索引标签 ‘b’ 的新 Series
s = pd.Series(data = [1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])
print(s[:3])
print(s[0:3:2])
print(s)
s['a'] = 10
print(s)
s['e'] = 5
print(s)
del s['a']
print(s)
s = s.drop(['a', 'b'])
print(s)
十四、练习
# 创建 Series 对象,数据是 "Google", "Baidu", "Wiki",索引
# 是"g", "b", "w"
# 添加以下数据"Yahoo", "Taobao",索引是"y", "t"
# 将"t"索引对应的数据更新为"Tencent"
# 找出前3个数据
# 删除第2个数据
# 遍历所有数据
s = pd.Series(data = ["Google", "Baidu", "Wiki"], index = ["g", "b", "w"])
print(s)
s["y"] = "Yahoo"
s["t"] = "Taobao"
print(s)
s["t"] = "Tencent"
print(s)
r = s[:3]
print(r)
del s['b']
print(s)
for i in s.values:
print(i)
for v in s:
print(v)
十五、基本运算
- 算术运算
- result = series * 2 # 所有元素乘以2
- 过滤
- filtered_series = series[series > 2] # 选择大于2的元素
- 数学函数
- import numpy as np
- result = np.sqrt(series) # 对每个元素取平方根
s = pd.Series(data = [1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])
print(s)
print(s * 2)
print(s + s)
print(s[s > 3])
print(s[s < 3])
print(s[s > 5])
s = pd.Series([16, 25, 36])
r = np.sqrt(s)
r = r.astype(int)
print(r)
十六、属性和方法-1
- 获取索引
- index = s.index
- 获取数据
- values = s.values
- 获取描述统计信息
- stats = s.describe()
- 获取最大值和最小值的索引
- max_index = s.idxmax()
- min_index = s.idxmin()
s = pd.Series(data = [1, 6, 3, 4], index = ['a', 'b', 'c', 'd'])
print(s.describe())
print(type(s.describe()))
print(s.describe()['max'])
print(s.describe().max())
print(s[s.idxmax()])
print(s.max())
十七、属性和方法-2
- print(s.dtype) # 数据类型
- print(s.shape) # 形状
- print(s.size) # 元素个数
- print(s.count()) #元素个数
- print(s.head()) # 前几个元素,默认是前 5 个
- print(s.tail()) # 后几个元素,默认是后 5 个
- print(s.sum()) # 求和
- print(s.mean()) # 平均值
- print(s.std()) # 标准差
- print(s.min()) # 最小值
- print(s.max()) # 最大值
# type(s):返回整个s 的类型, #s.dtype:表示s中数据的类型 #type(s[200]):表示索引对应的值的类型
s = pd.Series([100, "abc", True, False], index = [True, False, "def", 200])
print(s)
print(type(s), s.dtype, type(s[200]))
s = pd.Series([[1, 2, 3], [4, 5, 6]])
print(s.shape)
n = np.array([[1, 2, 3], [4, 5, 6]])
print(n.shape)
s = pd.Series([[1, 2, 3], [4, 5, 6]])
print(s.size)
s = pd.Series([11, 22, 33, 44, 55, 66])
# 默认返回前五位或者后五位
print(s.head())
print(s.tail())
print(s.head(3), s[:3])
print(s.tail(3), s[s.size - 3:])
s = pd.Series([1, 2, 3, 4, 5])
print(s.sum())
print(s.count())
print(s.sum()/s.count(), s.mean())
print(s.std())
print(s.max(), s.min(), s.median(), np.percentile(s, 50))
s = pd.Series([[1, 2], 3, [[4], 5]])
print(s.size, s.count())
十八、属性和方法-3
- 使用布尔表达式:
- print(s > 2) # 返回一个布尔 Series,其中的元素值大于 2
- 转换数据类型:
- s = s.astype(‘float64’) # 将 Series 中的所有元素转换为 float64类型
s = pd.Series([11, 22, 33, 44, 55, 66, 77, 88])
print(s[s > 33])
print(s > 3)
'''
3 44
4 55
5 66
6 77
7 88
dtype: int64
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
dtype: bool
'''
s = pd.Series([1, 2, 3])
print(s.dtype)
s = s.astype(np.float16)
print(s.dtype)
十九、练习
# 将城市信息保存到Series中
data = pd.Series(
['成都', '大连', '上海', '北京', '杭州', '北京', '大连', '成都', '深圳', '上海', '成都', '大连', '上海', '北京',
'深圳', '北京', '大连', '成都', '深圳', '上海', '沈阳', '沈阳', '长春', '太原', '大连', '北京', '北京'])
print(data)
# 统计城市名称出现的次数
r = data.value_counts()
print(r, type(r))
# 将城市名按照出现的次数升序排列
r = data.value_counts().sort_values()
print(r)
# 输出城市名出现的次数的平均值
r = data.value_counts().mean()
print(r)
# 先降序排列,再输出前5个出现次数最多城市信息
r = data.value_counts().sort_values(ascending=False).head(5)
print(r)
r = data.value_counts().sort_values().tail(5)
print(r)
# 输出排名2~4的城市信息
r = data.value_counts().sort_values(ascending=False).iloc[1:4]
print(r)
r = data.value_counts().sort_values(ascending=False)
print(r)
r = r[r > 3]
print(r)
二十、总结
- 了解Pandas的应用和特点
- 掌握Pandas的安装
- 掌握Series的特点和使用