Series
概述
- Series也是Pandas中的最基本的数据结构对象,也是DataFrame的列对象或者行对象,series本身也具有行索引。
- Series是一种类似于一维数组的对象,由下面两个部分组成:
- values:一组数据(numpy.ndarray类型)
- index:相关的数据行索引标签;如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。
(1) Series的常用属性
-
常见属性
属性 说明 loc 使用索引值取子集 iloc 使用索引位置取子集 dtype或dtypes Series内容的类型 T Series的转置矩阵 shape 数据的维数 size Series中元素的数量 values Series的值 index Series的索引值 - loc属性
first_row = data.loc[941] print(first_row) # 获取第一行数据, 但是是以列的方式展示的 print(type(first_row)) # <class 'pandas.core.series.Series'>
- iloc属性
first_row = data.iloc[0] # 使用索引位置获取自己 print(first_row) # 获取第一行数据, 但是是以列的方式展示的 print(type(first_row)) # <class 'pandas.core.series.Series'>
- dtype 或 dtypes
print(first_row.dtype) # 打印Series的元素类型, object表示字符串 print(first_row['year'].dtype) # 打印Series的year列的元素类型, int64# 打印Series的year列的元素类型, 该列值为字符串, 字符串没有dtype属性, 所以报错. print(first_row['firstname'].dtype)
- shape 和 size属性
print(first_row.shape) # 维度 # 结果为: (7,) 因为有7列元素 print(first_row.size) # 元素个数: 7
- values 属性
print(first_row.values) # 获取Series的元素值
- index属性
print(first_row.index) # 获取Series的索引print(first_row.keys()) # Series对象的keys()方法, 效果同上.
(2) 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 去重返回数组 value_counts 统计不同值数量 keys 获取索引值 head 查看前5个值 tail 查看后5个值 -
代码演示
# 1. 创建Series对象. s1 = pd.Series(data=[1, 2, 3, 4, 2, 3], index=['A', 'B', 'C', 'D', 'E', 'F']) print(s1)# 2. 演示Series对象的常用方法. print(len(s1)) # 获取长度, 6 print(s1.head()) # 获取前5条数据 print(s1.head(n=2)) # 获取前2条数据print(s1.tail()) # 获取后5条数据 print(s1.tail(n=3)) # 获取后3条数据print(s1.keys()) # 获取所有的列名print(s1.tolist()) # Series -> list列表 print(s1.to_list()) # 效果同上 print(s1.to_frame())# Series -> DataFrame对象print(s1.sort_values()) # 根据 值进行排序 默认 asc=True 升序 从小到大 print(s1.sort_values(ascending=False)) # 根据 值进行排序, False为降序 从大到小 print(s1.sort_index()) # 根据 索引进行排序, 默认升序# 平均值, 最大值, 最小值, 求和, 标准差... print(s1.mean()) print(s1.max()) print(s1.min()) print(s1.sum()) print(s1.std()) # 标准差 print(s1.var()) # 方差# 查看各列的 非空值总数 print(s1.count()) # 统计每个元素的个数 print(s1.value_counts()) # 类似于SQL语句: select 性别, count(id) from 表名 group by 性别; # 查看 Series列 的详细信息 print(s1.describe())
(3) Series的布尔索引
# 1. 读取数据 True -> 要, False -> 不要
df6 = pd.read_csv('data/scientists.csv')
df6
#%%
# 2. 查看每列的详细信息
df6.describe() # 统计信息
df6.info # 详细信息
#%%
# 3. 从 df对象中 -> 获取 Series对象
series_age = df6.Age
series_age
#%%
# 4. 演示 Series对象的 布尔索引
bool_list = [True, False, False, True, True, False, False, True]
print(series_age[bool_list])
#%%
# 5. 筛选年龄大于平均年龄的科学家
# 5.1 获取平均年龄
avg_mean = series_age.mean()
avg_mean
#%%
# 5.2 看看当前年龄 是否大于 平均年龄
cur_bool = [series_age > avg_mean]
cur_bool
#%%
# 5.3 获取 年龄大于平均年龄的科学家
df6.Name[series_age > avg_mean]
#%%
# 5.3 方式二
df6['Name'][df6['Age'] > df6['Age'].mean()]
(4) Series的运算
# 场景1: Series对象 和 数值运算, 则数值会和 Series对象的每个值进行具体的运算.
series_age + 100
series_age * 2
#%%
# 场景2: Series对象 和 Series对象运算, 会优先参考 索引列运算, 即: 索引值相同的进行计算, 不同的用NAN(空值)填充.
series_age + series_age
#%%
series_age.sort_index(ascending=False) + series_age
#%%
series_age + pd.Series([1, 2, 3])
series_age + pd.Series([1, 2, 3], index=['a', 'b', 'c'])