资讯详情

资讯详情

Pandas入门教程(四):Series数据结构——创建、索引与常用方法

一、什么是 SeriesSeries 是 Pandas 中的一个核心数据结构类似于一个一维的数组具有数据和索引。Series 可以存储任何数据类型整数、浮点数、字符串等并通过标签索引来访问元素。它的数据结构非常有用因为它可以处理各种数据类型同时保持了高效的数据操作能力比如可以通过标签来快速访问和操作数据。Series 的特点特点说明一维数组Series 中的每个元素都有一个对应的索引值索引每个数据元素都可以通过标签索引来访问默认从 0 开始的整数也可自定义数据类型可以容纳不同数据类型的元素包括整数、浮点数、字符串、Python 对象等大小不变性Series 的大小在创建后是不变的但可以通过某些操作如 append 或 delete来改变操作支持各种操作如数学运算、统计分析、字符串处理等缺失数据可以包含缺失数据Pandas 使用NaNNot a Number来表示缺失或无值自动对齐当对多个 Series 进行运算时Pandas 会自动根据索引对齐数据二、Series 的组成我们可以使用 Pandas 库来创建一个 Series 对象并且可以为其指定索引Index、名称Name以及值Values。pythonimport pandas as pd # 创建一个 Series 对象指定名称为 A值分别为 1, 2, 3, 4 # 默认索引为 0, 1, 2, 3 series pd.Series([1, 2, 3, 4], nameA) print(series) # 显式地设置索引 custom_index [1, 2, 3, 4] series_with_index pd.Series([1, 2, 3, 4], indexcustom_index, nameA) print(series_with_index)输出结果text0 1 1 2 2 3 3 4 Name: A, dtype: int64 1 1 2 2 3 3 4 4 Name: A, dtype: int64Series 的三个组成部分部分说明索引Index左侧的标签默认 0 开始值Values右侧的数据名称NameSeries 的标识可选三、创建 Series可以使用pd.Series()构造函数创建一个 Series 对象传递一个数据数组可以是列表、NumPy 数组等和一个可选的索引数组。pythonpandas.Series(dataNone, indexNone, dtypeNone, nameNone, copyFalse, fastpathFalse)参数说明参数说明data数据部分可以是列表、数组、字典、标量值等。不提供则创建空 Seriesindex索引部分用于对数据进行标记。不提供则创建默认整数索引dtype指定数据类型如np.int64、np.float64。不提供则自动推断nameSeries 的名称用于标识对象copy是否复制数据默认Falsefastpath是否启用快速路径默认False1. 从列表创建pythonimport pandas as pd a [1, 2, 3] myvar pd.Series(a) print(myvar)如果没有指定索引索引值就从 0 开始。我们可以根据索引值读取数据pythonprint(myvar[1]) # 输出 22. 指定索引pythonimport pandas as pd a [Google, Runoob, Wiki] myvar pd.Series(a, index[x, y, z]) print(myvar) print(myvar[y]) # 输出 Runoob3. 从字典创建pythonimport pandas as pd sites {1: Google, 2: Runoob, 3: Wiki} myvar pd.Series(sites) print(myvar)从上图可知字典的 key 变成了索引值。如果我们只需要字典中的一部分数据只需要指定需要数据的索引即可pythonmyvar pd.Series(sites, index[1, 2]) print(myvar)4. 设置名称pythonsites {1: Google, 2: Runoob, 3: Wiki} myvar pd.Series(sites, index[1, 2], nameRUNOOB-Series-TEST) print(myvar)5. 从 NumPy 数组创建pythonimport numpy as np s pd.Series(np.array([1, 2, 3, 4]))四种创建方式对比数据源示例索引来源列表pd.Series([1, 2, 3])默认 0, 1, 2列表 索引pd.Series([1, 2, 3], index[a,b,c])自定义字典pd.Series({a: 1, b: 2})字典的键NumPy 数组pd.Series(np.array([1, 2, 3]))默认 0, 1, 2四、Series 方法速查下面是 Series 中一些常用的方法方法名称功能描述index获取 Series 的索引values获取 Series 的数据部分返回 NumPy 数组head(n)返回 Series 的前 n 行默认为 5tail(n)返回 Series 的后 n 行默认为 5dtype返回 Series 中数据的类型shape返回 Series 的形状行数describe()返回 Series 的统计描述如均值、标准差、最小值等isnull()返回一个布尔 Series表示每个元素是否为 NaNnotnull()返回一个布尔 Series表示每个元素是否不是 NaNunique()返回 Series 中的唯一值去重value_counts()返回 Series 中每个唯一值的出现次数map(func)将指定函数应用于 Series 中的每个元素apply(func)将指定函数应用于 Series 中的每个元素常用于自定义操作astype(dtype)将 Series 转换为指定的类型sort_values()对 Series 中的元素进行排序按值排序sort_index()对 Series 的索引进行排序dropna()删除 Series 中的缺失值NaNfillna(value)填充 Series 中的缺失值NaNreplace(to_replace, value)替换 Series 中指定的值cumsum()返回 Series 的累计求和cumprod()返回 Series 的累计乘积shift(periods)将 Series 中的元素按指定的步数进行位移rank()返回 Series 中元素的排名corr(other)计算 Series 与另一个 Series 的相关性皮尔逊相关系数cov(other)计算 Series 与另一个 Series 的协方差to_list()将 Series 转换为 Python 列表to_frame()将 Series 转换为 DataFrameiloc[]通过位置索引来选择数据loc[]通过标签索引来选择数据五、综合实例pythonimport pandas as pd # 创建 Series data [1, 2, 3, 4, 5, 6] index [a, b, c, d, e, f] s pd.Series(data, indexindex) # 查看基本信息 print(索引, s.index) print(数据, s.values) print(数据类型, s.dtype) print(前两行数据, s.head(2)) # 使用 map 函数将每个元素加倍 s_doubled s.map(lambda x: x * 2) print(元素加倍后, s_doubled) # 计算累计和 cumsum_s s.cumsum() print(累计求和, cumsum_s) # 查找缺失值 print(缺失值判断, s.isnull()) # 排序 sorted_s s.sort_values() print(排序后的 Series, sorted_s)输出结果text索引 Index([a, b, c, d, e, f], dtypeobject) 数据 [1 2 3 4 5 6] 数据类型 int64 前两行数据 a 1 b 2 dtype: int64 元素加倍后 a 2 b 4 c 6 d 8 e 10 f 12 dtype: int64 累计求和 a 1 b 3 c 6 d 10 e 15 f 21 dtype: int64 缺失值判断 a False b False ...六、基本操作详解1. 访问与切片python# 指定索引创建 Series s pd.Series([1, 2, 3, 4], index[a, b, c, d]) # 获取值 value s[2] # 获取索引为 2 的值 print(s[a]) # 返回索引标签 a 对应的元素 # 获取多个值 subset s[1:4] # 获取索引为 1 到 3 的值 # 索引和值的对应关系 for index, value in s.items(): print(fIndex: {index}, Value: {value}) # 使用切片语法访问一部分 print(s[a:c]) # 返回索引标签 a 到 c 之间的元素 print(s[:3]) # 返回前三个元素2. 修改与增删python# 为特定的索引标签赋值 s[a] 10 # 将索引标签 a 对应的元素修改为 10 # 通过赋值给新的索引标签来添加元素 s[e] 5 # 在 Series 中添加一个新的元素 # 使用 del 删除指定索引标签的元素 del s[a] # 删除索引标签 a 对应的元素 # 使用 drop 方法删除一个或多个索引标签并返回一个新的 Series s_dropped s.drop([b])注意del直接修改原 Seriesdrop()返回新的 Series原数据不变。3. 基本运算python# 算术运算 result series * 2 # 所有元素乘以 2 # 过滤 filtered_series series[series 2] # 选择大于 2 的元素 # 数学函数 import numpy as np result np.sqrt(series) # 对每个元素取平方根4. 统计计算pythonprint(s.sum()) # 总和 print(s.mean()) # 平均值 print(s.max()) # 最大值 print(s.min()) # 最小值 print(s.std()) # 标准差5. 属性和方法pythonindex s.index # 获取索引 values s.values # 获取值数组 stats s.describe() # 描述统计信息 max_index s.idxmax() # 最大值的索引 min_index s.idxmin() # 最小值的索引 print(s.dtype) # 数据类型 print(s.shape) # 形状 print(s.size) # 元素个数 print(s.head()) # 前几个元素默认前 5 个 print(s.tail()) # 后几个元素默认后 5 个6. 布尔表达式pythonprint(s 2) # 返回一个布尔 Series7. 类型转换pythons s.astype(float64) # 转换为 float64 类型七、Series 注意事项注意事项说明数据有序Series 中的数据是有序的带索引的数组可以将 Series 视为带有索引的一维数组索引可重复索引可以是唯一的但不是必须的数据来源广数据可以是标量、列表、NumPy 数组等八、Series 操作流程图九、常见问题排查问题现象可能原因解决方案KeyError索引不存在检查索引标签拼写IndexError位置索引越界检查索引范围数据类型不符预期自动推断错误显式指定dtype运算结果含 NaN索引未对齐检查两个 Series 的索引del后原数据变化del是原地删除如需保留原数据用drop()切片结果与预期不符标签切片含端点标签切片s[a:c]包含 c重要区别位置切片s[1:4]不包含末端标签切片s[a:c]包含末端。十、小结本篇你全面掌握了 Pandas Series 的用法定位带标签的一维数组可存储任意数据类型。创建从列表、字典、NumPy 数组创建支持自定义索引与名称。访问位置索引、标签索引、切片、loc、iloc。方法head、tail、describe、map、apply、sort_values等。运算算术运算、数学函数、布尔过滤、统计计算。增删改赋值、del、drop。类型转换astype、to_list、to_frame。Series 是一维数据的载体也是理解 DataFrame 的基础。下一篇我们将深入学习DataFrame 数据结构掌握二维表格数据的创建与操作。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →