前言
上一期介绍了将文件加载到Pandas对象,这个对象就是Pandas的数据结构。本次我们就来系统介绍一下Pandas的数据结构。
本文框架
- 1. 数据结构简介
- 2. 导入Pandas、Numpy
- 3. Series
- 3.1 仅有数据列表即可产生最简单的Series
- 3.2 创建一个具有标签索引的Series
- 3.3 使用Python字典创建Series
- 3.4 根据标签索引查询数据
- 4. DataFrame
- 4.1 根据多个字典序列创建dataframe
- 5. 从DataFrame中查询出Series
- 5.1 查询一列
- 5.2 查询多列
- 5.3 查询一行
- 5.4 查询多行
1. 数据结构简介
Pandas提供Series和DataFrame作为数组数据的存储框架。
DataFrame:代表整个表格对象,是一个二维的数据,有多行和多列;
Series:每一列或者每一行都是一个Series,他是一个一维的数据(图中红框)。
2. 导入Pandas、Numpy
代码语言:javascript复制import pandas as pd
import numpy as np
3. Series
Series是一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(即索引)组成。
3.1 仅有数据列表即可产生最简单的Series
代码语言:javascript复制# 创建Series
s1 = pd.Series([1,2,5.2,"a"])
s1
# 输出结果(左侧为索引,右侧是数据)
0 1
1 2
2 5.2
3 a
dtype: object
--------------------------------------------------------------------------------
# 获取索引
s1.index
# 输出结果
RangeIndex(start=0, stop=4, step=1)
-------------------------------------------------------------------------------
# 获取数据
s1.values
# 输出结果
array([1, 'a', 5.2, 7], dtype=object)
3.2 创建一个具有标签索引的Series
代码语言:javascript复制# 创建Series
s2 = pd.Series([1,2,5.2,"a"],index=["a","b","c","d"])
s2
# 输出结果
a 1
b 2
c 5.2
d a
dtype: object
3.3 使用Python字典创建Series
代码语言:javascript复制# 创建Series
sdata = {"a":1,"b":2,"c":3,"d":4}
s3 = pd.Series(sdata)
s3
# 输出结果
a 1
b 2
c 3
d 4
dtype: int64
3.4 根据标签索引查询数据
查询一个值时返回值为一个数值,查询多个值时返回Series对象。
代码语言:javascript复制# 查询一个值
s3["b"]
# 输出结果
2
-------------------------------------------------------------------------------
# 查询多个值(使用双中括号)
s3[["a","c"]]
# 输出结果
a 1
c 3
dtype: int64
4. DataFrame
DataFrame是一个表格型的数据结构;
每列可以是不同的值类型(数值、字符串、布尔值等) 既有行索引index,也有列索引columns,可以被看做由Series组成的字典。
4.1 根据多个字典序列创建dataframe
代码语言:javascript复制# 创建DataFrame
data = {"a":[1,2,3,4,5],
"b":[7,8,9,10,11],
"c":[12,13,14,15,16]}
df = pd.DataFrame(data)
df
# 输出结果
a b c
0 1 7 12
1 2 8 13
2 3 9 14
3 4 10 15
4 5 11 16
---------------------------------------------------------------------------------
# 查询类型
df.dtypes
# 返回结果
a int64
b int64
c int64
dtype: object
---------------------------------------------------------------------------------
# 查询列索引
df.columns
# 返回结果
Index(['a', 'b', 'c'], dtype='object')
---------------------------------------------------------------------------------
# 查询行索引
df.index
# 返回结果
RangeIndex(start=0, stop=5, step=1)
5. 从DataFrame中查询出Series
如果只查询一行、一列,返回的是pd.Series;
如果查询多行、多列,返回的是pd.DataFrame。
代码语言:javascript复制# 演示数据框
df
# 输出结果
a b c
0 1 7 12
1 2 8 13
2 3 9 14
3 4 10 15
4 5 11 16
5.1 查询一列
结果是一个pd.Series。
代码语言:javascript复制# 查询一列
df["a"]
# 输出结果
0 1
1 2
2 3
3 4
4 5
Name: a, dtype: int64
-------------------------------------------------------------------------------
# 查看类型
type(df['a'])
# 返回结果
pandas.core.series.Series
5.2 查询多列
结果是一个pd.DataFrame。
代码语言:javascript复制# 查询多列
df[['a',"b"]]
# 返回结果
a b
0 1 7
1 2 8
2 3 9
3 4 10
4 5 11
--------------------------------------------------------------------------------
# 查看类型
type(df[['a',"b"]])
# 返回结果
pandas.core.frame.DataFrame
5.3 查询一行
结果是一个pd.Series。
代码语言:javascript复制# 查询一行
df.loc[1]
# 返回结果
a 2
b 8
c 13
Name: 1, dtype: int64
--------------------------------------------------------------------------------
# 查看类型
type(df.loc[1])
# 返回结果
pandas.core.series.Series
5.4 查询多行
结果是一个pd.DataFrame。
代码语言:javascript复制# 查询多行
df.loc[1:3]
# 返回结果
a b c
1 2 8 13
2 3 9 14
3 4 10 15
--------------------------------------------------------------------------------
# 查看类型
type(df.loc[1:3])
# 返回结果
pandas.core.frame.DataFrame