pandas与DataFrame、Series 数据结构
-
Pandas简介
-
Pandas是一个开源的Python库,使用其强大的数据结构提供高性能的数据处理和分析工具,Pandas这个名字源自面板数据 - 来自多维数据的计量经济学
-
2008年,开发人员Wes McKinney在需要高性能,灵活的数据分析工具时开始开发Pandas
-
在Pandas之前,Python主要用于数据管理和准备,它对数据分析的贡献很小,Pandas解决了这个问题
-
使用Pandas,无论数据来源如何 - 加载,准备,操作,建模和分析,我们都可以完成数据处理和分析中的五个典型步骤
-
Python与Pandas一起使用的领域广泛,包括学术和商业领域,包括金融,经济学,统计学,分析学等
-
Pandas的主要特点
- 使用默认和自定义索引的快速高效的DataFrame对象
- 用于将数据从不同文件格式加载到内存数据对象的工具
- 数据对齐和缺失数据的集成处理
- 重新设置和旋转日期集
- 大数据集的基于标签的分片,索引和子集
- 数据结构中的列可以被删除或插入
- 按数据分组进行聚合和转换
- 高性能的数据合并和连接
- 时间序列功能
- Pandas数据结构
-
- Pandas 自己独有的基本数据结构,Python 中有的数据类型在这里依然适用,也同样可以使用类自己定义数据类型
名称
|
说明 |
Series
|
一维数组,与Numpy中的一维array类似 |
DataFrame
|
二维的表格型数据结构,DataFrame可以理解成Series的容器 |
Panel
|
三维的数组,Panel可以理解为DataFrame的容器 (Python3中似乎不太支持) |
-
- pandas.Series() 创建一维数组
- df = pandas.DataFrame() 创建二维数组(表格)
-
- df.index 全部行的名称
- df.columns 全部列的名称
- df.values 所有内容
- df.describe() 数字描述,如平均值、最大最小值等
- df.T 行列互换
- df.sort_index() 通过索引排序
- df.sort_values() 通过元素值排序
# Series, DataFrame
def function1():
# 通过Series生成一维数组, np.nan表示空数据
s = pd.Series([1, np.nan, 2])
# 索引在左边 值在右边
# 0 1.0
# 1 NaN
# 2 2.0
# dtype: float64
print(s)
# 通过DataFrame生成二维数组(表格)
df = pd.DataFrame(np.arange(1, 7).reshape(2, 3))
# 0 1 2
# 0 1 2 3
# 1 4 5 6
print(df)
# 自定义字典
dictionary = {'height': pd.Series([175, 182, 178]),
# date_range(): 生成时间序列, periods期间范围
'birthday': pd.date_range("2000-1-1", periods=3),
'weight': np.array([65, 68, 70], dtype='int32'),
'tool': pd.Categorical(["plane", "train", "bus"])}
df1 = pd.DataFrame(dictionary)
# height birthday weight tool
# 0 175 2000-01-01 65 plane
# 1 182 2000-01-02 68 train
# 2 178 2000-01-03 70 bus
print(df1)
# 每一行的索引
# RangeIndex(start=0, stop=3, step=1)
print(df1.index)
# 每一列的列名称
# Index(['height', 'birthday', 'weight', 'tool'], dtype='object')
print(df1.columns)
# 所有内容
# [[175 Timestamp('2000-01-01 00:00:00') 65 'plane']
# [182 Timestamp('2000-01-02 00:00:00') 68 'train']
# [178 Timestamp('2000-01-03 00:00:00') 70 'bus']]
print(df1.values)
# 数字描述
# height weight
# count 3.000000 3.000000
# mean 178.333333 67.666667
# ... ... ...
# max 182.000000 70.000000
print(df1.describe())
# 行列转换
# 0 1 2
# height 175 182 178
# birthday 2000-01-01 00:00:00 2000-01-02 00:00:00 2000-01-03 00:00:00
# weight 65 68 70
# tool plane train bus
print(df1.T)
# axis=0,根据行方向排序,即将行号排序,ascending 是否升序
# height birthday weight tool
# 2 178 2000-01-03 70 bus
# 1 182 2000-01-02 68 train
# 0 175 2000-01-01 65 plane
print(df1.sort_index(axis=0, ascending=False))
# 根据weight列的值升序排序,默认排序也是升序
# height birthday weight tool
# 0 175 2000-01-01 65 plane
# 1 182 2000-01-02 68 train
# 2 178 2000-01-03 70 bus
print(df1.sort_values(by='weight', ascending=True))