京公网安备 11010802034615号
经营许可证编号:京B2-20210330
pandas有Series和DataFrame两种数据结构,我们之前已经讲过了DataFrame,接下来给大家介绍下另一种数据结构Series。
什么是Series?
# 自定义Series索引 arr = np.random.rand(5) s = pd.Series(arr, index=list("abcde")) print(s)
a 0.239432 b 0.554542 c 0.058231 d 0.211549 e 0.362285 dtype: float64
[ 0.67962276 0.76999562 0.95308305 0.66162424 0.93883112] 0 0.679623 1 0.769996 2 0.953083 3 0.661624 4 0.938831 dtype: float64 RangeIndex(start=0, stop=5, step=1) <class 'pandas.core.indexes.range.RangeIndex'> [0, 1, 2, 3, 4] [ 0.67962276 0.76999562 0.95308305 0.66162424 0.93883112]
# 自定义Series索引 arr = np.random.rand(5) s = pd.Series(arr, index=list("abcde")) print(s)
a 0.239432 b 0.554542 c 0.058231 d 0.211549 e 0.362285 dtype: float64
Series创建方法
# 通过标量创建 s = pd.Series(100, index=range(5)) print(s)
0 100 1 100 2 100 3 100 4 100 dtype: int64
# 通过标量创建 s = pd.Series(100, index=range(5)) print(s)
0 100 1 100 2 100 3 100 4 100 dtype: int64
# 通过标量创建 s = pd.Series(100, index=range(5)) print(s)
0 100 1 100 2 100 3 100 4 100 dtype: int64
Series下标索引
arr = np.random.rand(5)*100 s = pd.Series(arr, index=[chr(i) for i in range(97, 97+len(arr))]) print(s) print("") bool_index = s>50 # 布尔型索引 print(bool_index) print("") print(s[s>50]) # 用bool_index取出s中大于50的值
a 24.447599 b 0.795073 c 49.464825 d 9.987239 e 86.314340 dtype: float64 a False b False c False d False e True dtype: bool e 86.31434 dtype: float64
a 0.001694 b 0.107466 c 0.272233 d 0.637616 e 0.875348 dtype: float64 0.107465887721 0.107465887721 b 0.107466 d 0.637616 dtype: float64 a 0.001694 c 0.272233 dtype: float64
Series切片
print(s)
s["f"] = None # 给s添加一个空值
s["g"] = np.nan # np.nan 代表有问题的值 也会识别为空值
print("")
print(s)
print("")
bool_index1 = s.isnull() # 判断那些值是空值: 空值是True 非空为False
print(bool_index1)
print("")
print(s[bool_index1]) # 取出空值
print("")
bool_index2 = s.notnull() # 判断那些值是非空值: 空值是False 非空为True
print(bool_index2)
print("")
print(s[bool_index2]) # 取出非空值
a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 f None g NaN dtype: object a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 f None g NaN dtype: object a False b False c False d False e False f True g True dtype: bool f None g NaN dtype: object a True b True c True d True e True f False g False dtype: bool a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 dtype: object
Series布尔型索引
print(s)
s["f"] = None # 给s添加一个空值
s["g"] = np.nan # np.nan 代表有问题的值 也会识别为空值
print("")
print(s)
print("")
bool_index1 = s.isnull() # 判断那些值是空值: 空值是True 非空为False
print(bool_index1)
print("")
print(s[bool_index1]) # 取出空值
print("")
bool_index2 = s.notnull() # 判断那些值是非空值: 空值是False 非空为True
print(bool_index2)
print("")
print(s[bool_index2]) # 取出非空值
a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 f None g NaN dtype: object a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 f None g NaN dtype: object a False b False c False d False e False f True g True dtype: bool f None g NaN dtype: object a True b True c True d True e True f False g False dtype: bool a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 dtype: object
print(s)
s["f"] = None # 给s添加一个空值
s["g"] = np.nan # np.nan 代表有问题的值 也会识别为空值
print("")
print(s)
print("")
bool_index1 = s.isnull() # 判断那些值是空值: 空值是True 非空为False
print(bool_index1)
print("")
print(s[bool_index1]) # 取出空值
print("")
bool_index2 = s.notnull() # 判断那些值是非空值: 空值是False 非空为True
print(bool_index2)
print("")
print(s[bool_index2]) # 取出非空值
a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 f None g NaN dtype: object a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 f None g NaN dtype: object a False b False c False d False e False f True g True dtype: bool f None g NaN dtype: object a True b True c True d True e True f False g False dtype: bool a 24.4476 b 0.795073 c 49.4648 d 9.98724 e 86.3143 dtype: object
Series基本技巧
查看数据
import numpy as np import pandas as pd
s = pd.Series(np.random.rand(15)) print(s) print("") print(s.head()) # 查看前5条数据 print("") print(s.head(2)) # 查看前2条数据 print("") print(s.tail()) # 查看后5条数据 print("") print(s.tail(2)) # 查看后两条数据
0 0.049732 1 0.281123 2 0.398361 3 0.492084 4 0.555350 5 0.729037 6 0.603854 7 0.643413 8 0.951804 9 0.459948 10 0.261974 11 0.897656 12 0.428898 13 0.426533 14 0.301044 dtype: float64 0 0.049732 1 0.281123 2 0.398361 3 0.492084 4 0.555350 dtype: float64 0 0.049732 1 0.281123 dtype: float64 10 0.261974 11 0.897656 12 0.428898 13 0.426533 14 0.301044 dtype: float64 13 0.426533 14 0.301044 dtype: float64
重置索引
# reindex 与给索引重新命名不同 s = pd.Series(np.random.rand(5), index=list("bdeac")) print(s) print("") s1 = s.reindex(list("abcdef")) # Series的reindex使它符合新的索引,如果索引不存在就自动填入空值 print(s1) print("") print(s) # 不会改变原数组 print("") s2 = s.reindex(list("abcdef"), fill_value=0) # 如果索引值不存在就自定义填入缺失值 print(s2)
b 0.539124 d 0.853346 e 0.065577 a 0.406689 c 0.562758 dtype: float64 a 0.406689 b 0.539124 c 0.562758 d 0.853346 e 0.065577 f NaN dtype: float64 b 0.539124 d 0.853346 e 0.065577 a 0.406689 c 0.562758 dtype: float64 a 0.406689 b 0.539124 c 0.562758 d 0.853346 e 0.065577 f 0.000000 dtype: float64
s1 = pd.Series(np.random.rand(3), index=list("abc")) s2 = pd.Series(np.random.rand(3), index=list("cbd")) print(s1) print("") print(s2) print("") print(s1+s2) # 对应的标签相加 缺失值加任何值还是缺失值
a 0.514657 b 0.618971 c 0.456840 dtype: float64 c 0.083065 b 0.893543 d 0.125063 dtype: float64 a NaN b 1.512513 c 0.539905 d NaN dtype: float64
删除
# Series.drop("索引名") s = pd.Series(np.random.rand(5), index=list("abcde")) print(s) print("") s1 = s.drop("b") # 一次删除一个并返回副本 print(s1) print("") s2 = s.drop(["d", "e"]) # 一次删除两个并返回副本 print(s2) print("") print(s) # 验证原数没有改变
a 0.149823 b 0.330215 c 0.069852 d 0.967414 e 0.867417 dtype: float64 a 0.149823 c 0.069852 d 0.967414 e 0.867417 dtype: float64 a 0.149823 b 0.330215 c 0.069852 dtype: float64 a 0.149823 b 0.330215 c 0.069852 d 0.967414 e 0.867417 dtype: float64
s = pd.Series(np.random.rand(5), index=list("abcde")) print(s) print("") s1 = s.drop(["b", "c"], inplace=True) # inplace默认是False 改为True后不会返回副本 直接修改原数组 print(s1) print("") print(s) # 验证原数组已改变
a 0.753187 b 0.077156 c 0.626230 d 0.428064 e 0.809005 dtype: float64 None a 0.753187 d 0.428064 e 0.809005 dtype: float64
添加
s1 = pd.Series(np.random.rand(5), index=list("abcde")) print(s1) print("") # 通过索引标签添加 s1["f"] = 100 print(s1) print("") # 通过append添加一个数组 并返回一个新的数组 s2 = s1.append(pd.Series(np.random.rand(2), index=list("mn"))) print(s2)
a 0.860190 b 0.351980 c 0.237463 d 0.159595 e 0.119875 dtype: float64 a 0.860190 b 0.351980 c 0.237463 d 0.159595 e 0.119875 f 100.000000 dtype: float64 a 0.860190 b 0.351980 c 0.237463 d 0.159595 e 0.119875 f 100.000000 m 0.983410 n 0.293722 dtype: float64
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
教材入口:https://edu.cda.cn/goods/show/3151 “纲举目张,执本末从。” 若想在数据分析领域有所收获,一套合适的学习教材至 ...
2025-11-04【2025最新版】CDA考试教材:CDA教材一级:商业数据分析(2025)__商业数据分析_cda教材_考试教材 (cdaglobal.com) ...
2025-11-04在数字化时代,数据挖掘不再是实验室里的技术探索,而是驱动商业决策的核心能力 —— 它能从海量数据中挖掘出 “降低成本、提升 ...
2025-11-04在 DDPM(Denoising Diffusion Probabilistic Models)训练过程中,开发者最常困惑的问题莫过于:“我的模型 loss 降到多少才算 ...
2025-11-04在 CDA(Certified Data Analyst)数据分析师的工作中,“无监督样本分组” 是高频需求 —— 例如 “将用户按行为特征分为高价值 ...
2025-11-04当沃尔玛数据分析师首次发现 “啤酒与尿布” 的高频共现规律时,他们揭开了数据挖掘最迷人的面纱 —— 那些隐藏在消费行为背后 ...
2025-11-03这个问题精准切中了配对样本统计检验的核心差异点,理解二者区别是避免统计方法误用的关键。核心结论是:stats.ttest_rel(配对 ...
2025-11-03在 CDA(Certified Data Analyst)数据分析师的工作中,“高维数据的潜在规律挖掘” 是进阶需求 —— 例如用户行为包含 “浏览次 ...
2025-11-03在 MySQL 数据查询中,“按顺序计数” 是高频需求 —— 例如 “统计近 7 天每日订单量”“按用户 ID 顺序展示消费记录”“按产品 ...
2025-10-31在数据分析中,“累计百分比” 是衡量 “部分与整体关系” 的核心指标 —— 它通过 “逐步累加的占比”,直观呈现数据的分布特征 ...
2025-10-31在 CDA(Certified Data Analyst)数据分析师的工作中,“二分类预测” 是高频需求 —— 例如 “预测用户是否会流失”“判断客户 ...
2025-10-31在 MySQL 实际应用中,“频繁写入同一表” 是常见场景 —— 如实时日志存储(用户操作日志、系统运行日志)、高频交易记录(支付 ...
2025-10-30为帮助教育工作者、研究者科学分析 “班级规模” 与 “平均成绩” 的关联关系,我将从相关系数的核心定义与类型切入,详解 “数 ...
2025-10-30对 CDA(Certified Data Analyst)数据分析师而言,“相关系数” 不是简单的数字计算,而是 “从业务问题出发,量化变量间关联强 ...
2025-10-30在构建前向神经网络(Feedforward Neural Network,简称 FNN)时,“隐藏层数目设多少?每个隐藏层该放多少个神经元?” 是每个 ...
2025-10-29这个问题切中了 Excel 用户的常见困惑 —— 将 “数据可视化工具” 与 “数据挖掘算法” 的功能边界混淆。核心结论是:Excel 透 ...
2025-10-29在 CDA(Certified Data Analyst)数据分析师的工作中,“多组数据差异验证” 是高频需求 —— 例如 “3 家门店的销售额是否有显 ...
2025-10-29在数据分析中,“正态分布” 是许多统计方法(如 t 检验、方差分析、线性回归)的核心假设 —— 数据符合正态分布时,统计检验的 ...
2025-10-28箱线图(Box Plot)作为展示数据分布的核心统计图表,能直观呈现数据的中位数、四分位数、离散程度与异常值,是质量控制、实验分 ...
2025-10-28在 CDA(Certified Data Analyst)数据分析师的工作中,“分类变量关联分析” 是高频需求 —— 例如 “用户性别是否影响支付方式 ...
2025-10-28