Series和DataFrame

学习目标

  • 掌握Series的常用属性及方法
  • 掌握DataFrame的常用属性及方法
  • 掌握DataFrame行列标签的设置

1. Series 详解

Series是 pandas 中用来存储一维数据的容器。

1.1 创建 Series

1)创建 Series 的最简单方法是传入一个Python列表

  • 如果传入的数据类型是统一的数字,那么最终的 dtype 类型是int64
  • 如果传入的数据类型是统一的字符串,那么最终的 dtype 类型是object
  • 如果传入的数据类型是多种类型,那么最终的 dtype 类型也是object
s = pd.Series(['banana', 42])
print(s)
print(type(s))

s = pd.Series(['banana', 'apple'])
print(s)
print(type(s))

s = pd.Series([50, 42])
print(s)
print(type(s))

img

注意:上面的结果中,左边显示的0,1是 Series 的行标签,默认为0,1,2,3...

2)创建 Series 时,也可以通过 index 参数来指定行标签

s = pd.Series(['smart', 18], index=['name', 'age'])
print(s)
print(type(s))

img

1.2 Series 常用操作

常用属性和方法

属性或方法 说明
s.shape 查看 Series 数据的形状
s.size 查看 Series 数据的个数
s.index 获取 Series 数据的行标签
s.values 获取 Series 数据的元素值
s.keys() 获取 Series 数据的行标签,和 s.index 效果相同
s.loc[行标签] 根据行标签获取 Series 中的某个元素数据
s.iloc[行位置] 根据行位置获取 Series 中的某个元素数据
s.dtypes 查看 Series 数据元素的类型

示例演示

1)加载 scientists.csv 数据集,并获取 Age 列的数据

scientists = pd.read_csv('./data/scientists.csv')
scientists

img

# 并获取 Age 列的数据
age_series = scientists['Age']
print(age_series)
print(type(age_series))

img

2)常用属性和方法演示

age_series.shape
age_series.size
age_series.index
age_series.values
age_series.keys()
age_series.loc[1]
age_series.iloc[1]
age_series.dtypes

img

常用统计方法

方法 说明
s.mean() 计算 Series 数据中元素的平均值
s.max() 计算 Series 数据中元素的最大值
s.min() 计算 Series 数据中元素的最小值
s.std() 计算 Series 数据中元素的标准差
s.value_counts() 统计 Series 数据中不同元素的个数
s.count() 统计 Series 数据中非空(NaN)元素的个数
s.describe() 显示 Series 数据中元素的各种统计值

示例演示

1)meanmaxminstd统计方法演示

# 计算年龄的平均值
age_series.mean()

img

# 计算年龄的最大值
age_series.max()

img

# 计算年龄的最小值
age_series.min()

img

# 计算年龄的标准差
age_series.std()

img

2)value_counts 统计方法演示

# 获取职业这一列数据
occupation_series = scientists['Occupation']
print(occupation_series)
occupation_series.value_counts()

img

3)count 统计方法演示

# 统计 Born 这一列非空元素的个数
scientists['Born'].count()

img

4)describe 统计方法演示

# age_series 是数值型数据
age_series.describe()

# occupation_series 是非数值型数据
occupation_series.describe()

img

Series方法(备查)

方法 说明
append 连接两个或多个Series
corr 计算与另一个Series的相关系数
cov 计算与另一个Series的协方差
describe 计算常见统计量
drop_duplicates 返回去重之后的Series
equals 判断两个Series是否相同
get_values 获取Series的值,作用与values属性相同
hist 绘制直方图
isin Series中是否包含某些值
min 返回最小值
max 返回最大值
mean 返回算术平均值
median 返回中位数
mode 返回众数
quantile 返回指定位置的分位数
replace 用指定值代替Series中的值
sample 返回Series的随机采样值
sort_values 对值进行排序
to_frame 把Series转换为DataFrame
unique 去重返回数组

1.3 bool 索引

Series 支持 bool 索引,可以从 Series 获取 bool 索引为 True 的位置对应的数据。

bool_values = [False, True, True, True, False, False, False, True]
age_series[bool_values]

img

应用:从 age_series 中删选出年龄大于平均值的数据.

# 应用:从 age_series 中删选出年龄大于平均值的数据.
age_series[age_series>age_series.mean()]

img

1.4 Series 运算

情况 说明
Series 和 数值型数据运算 Series 中的每个元素和数值型数据逐一运算,返回新的 Series
Series 和 另一 Series 运算 两个 Series 中相同行标签的元素分别进行运算,若不存在相
同的行标签,计算后的结果为 NaN,最终返回新的 Series

Series 和 数值型数据运算

# 加法
age_series + 100

img

# 乘法
age_series * 2

img

Series 和 另一 Series 运算

# 加法
age_series + age_series
# 乘法
age_series * age_series

img

# 创建新的 Series 数据
new_series = pd.Series([1, 100])

img

注意:age_series 中的一些元素在 new_series 中不存在相同行标签的数据

# 两个 Series 相加
age_series + new_series

img

# 两个 Series 相乘
age_series * new_series

img

2. DataFrame 详解

2.1 创建 DataFrame

1)可以使用字典来创建DataFrame

peoples = pd.DataFrame({
    'Name': ['Smart', 'David'],
    'Occupation': ['Teacher', 'IT Engineer'],
    'Age': [18, 30]
})
peoples

img

2)创建 DataFrame 的时候可以使用colums参数指定列的顺序,也可以使用 index 参数来指定行标签

peoples = pd.DataFrame({
    'Occupation': ['Teacher', 'IT Engineer'],
    'Age': [18, 30]
}, columns=['Age', 'Occupation'], index=['Smart', 'David'])
peoples

img

3)也可以使用嵌套列表创建 DataFrame,并使用 columns 参数指定列标签,使用 index 参数来指定行标签

peoples = pd.DataFrame([
    ['Teacher', 18],
    ['IT Engineer', 30]
], columns=['Occupation', 'Age'], index=['Smart', 'David'])
peoples

img

2.2 DataFrame 常用操作

常用属性和方法

属性或方法 说明
df.shape 查看 DataFrame 数据的形状
df.size 查看 DataFrame 数据元素的总个数
df.ndim 查看 DataFrame 数据的维度
len(df) 获取 DataFrame 数据的行数
df.index 获取 DataFrame 数据的行标签
df.columns 获取 DataFrame 数据的列标签
df.dtypes 查看 DataFrame 每列数据元素的类型
df.info() 查看 DataFrame 每列的结构
df.head(n) 获取 DataFrame 的前 n 行数据,n 默认为 5
df.tail(n) 获取 DataFrame 的后 n 行数据,n 默认为 5

1)常用属性和方法演示

scientists.shape
scientists.size
scientists.ndim
len(scientists)

img

scientists.index
scientists.columns

img

scientists.dtypes
scientists.info()

img

Pandas与Python常用数据类型对照:

Pandas类型 Python类型 说明
object string 字符串类型
int64 int 整形
float64 float 浮点型
datetime64 datetime 日期时间类型,python中需要加载
scientists.head()
scientists.tail()

img

常用统计方法

方法 说明
s.max() 计算 DataFrame 数据中每列元素的最大值
s.min() 计算 DataFrame 数据中每列元素的最小值
s.count() 统计 DataFrame 数据中每列非空(NaN)元素的个数
s.describe() 显示 DataFrame 数据中每列元素的各种统计值

1)maxmincount 演示

scientists.max()
scientists.min()
scientists.count()
scientists.size()

img

2)describe 演示

scientists.describe()

img

注意:describe 方法默认只显示数值型列的统计信息,可以通过 include 参数设置显示非数值型列的统计信息

import numpy as np
scientists.describe(include=[np.object_])

img

2.3 bool 索引

DataFrame 支持 bool 索引,可以从 DataFrame 获取 bool 索引为 True 的对应行的数据。

bool_values = [False, True, True, True, False, False, False, True]
scientists[bool_values]

img

应用:获取 scientists 中 Age 大于平均值的科学家信息

# 应用:获取 scientists 中 Age 大于平均值的科学家信息
scientists[scientists['Age'] > scientists['Age'].mean()]

img

2.4 DataFrame 运算

情况 说明
DataFrame 和 数值型数据运算 DataFrame 中的每个元素和数值型数据逐一运算,
返回新的 DataFrame
DataFrame 和 另一 DataFrame 运算 两个 DataFrame 中相同行标签和列标签的元素分
别进行运算,若不存在相同的行标签或列标签,
计算后的结果为 NaN,最终返回新的 DataFrame

DataFrame 和 数值型数据运算

# DataFrame 和 数值型数据运算
scientists * 2

img

DataFrame 和 另一 DataFrame 运算

# DataFrame 和 另一 DataFrame 运算
scientists + scientists

img

# DataFrame 和 另一 DataFrame 运算
scientists + scientists[:4]

img

2.5 行标签和列表签操作

2.5.1 加载数据后,指定某列数据作为行标签

加载数据文件时,如果不指定行标签,Pandas会自动加上从0开始的行标签;

可以通过df.set_index('列名')的方法重新将指定的列数据设置为行标签

scientists = pd.read_csv('./data/scientists.csv')
scientists

img

# 设置 Name 列的值作为行标签
scientists_df = scientists.set_index('Name')
scientists_df

img

设置行标签之后,可以通过 reset_index 方法重置行标签:

# 注意:reset_index返回的是一个新的 DataFrame
scientists_df.reset_index()

img

2.5.2 加载数据时,指定某列数据作为行标签

加载数据文件的时候,可以通过通过 index_col 参数,指定使用某一列数据作为行标签,index_col 参数可以指定列名或列位置

1)加载 scientists.csv数据时,将 Name 列设置为行标签

pd.read_csv('./data/scientists.csv', index_col='Name')
或
pd.read_csv('./data/scientists.csv', index_col=0)

img

2.5.3 加载数据后,修改行标签和列标签

方式 说明
df.rename(index={'原行标签名': '新行标签名', ...}, columns={'原列标签名': '新列标签名', ...}) 修改指定的行标签和列标签,rename修改后返回新的 DataFrame
df.index = ['新行标签名1', '新行标签名2', ...]
df.columns = ['新列标签名1', '新列标签名2', …]
修改行标签和列标签,直接对原 DataFrame 进行修改

1)加载 scientists.csv数据集

scientists = pd.read_csv('./data/scientists.csv', index_col='Name')
scientists

img

2)使用 rename 修改行标签和列标签

index_name = {'Rosaline Franklin': 'rosaline franklin', 'John Snow': 'john snow'}
columns_name = {'Born': 'born', 'Age': 'age'}
# 注意:rename 修改之后,返回的是一个新的 DataFrame
scientists.rename(index=index_name, columns=columns_name)

img

3)使用 df.indexdf.columns 分别修改行标签和列标签

# 修改行标签
scientists.index = ['rosaline franklin', 'William Gosset', 'Florence Nightingale',
       'Marie Curie', 'Rachel Carson', 'john snow', 'Alan Turing',
       'Johann Gauss']
# 修改列标签
scientists.columns = ['born', 'Died', 'age', 'Occupation']
scientists

img

总结

  • 掌握Series的常用属性及方法
  • 掌握DataFrame的常用属性及方法
  • 掌握DataFrame行列标签的设置
    • set_index、reset_index
    • rename
    • df.index、df.columns