1.1 创建

构造方法:pd.Series()

  • 从列表创建
  • 从元组创建
  • 从 ndarray 创建
  • 从字典创建
  • 从标量创建
  • 从 range 创建
  • 从生成器创建
import pandas as pd
import numpy as np
 
# 从列表创建
s1 = pd.Series([1, 2, 3, 4])
 
# 从元组创建
s2 = pd.Series((1, 2, 3))
 
# 从 ndarray 创建
s3 = pd.Series(np.array([1, 2, 3]))
 
# 从字典创建(键作为索引)
s4 = pd.Series({'a': 1, 'b': 2})
 
# 从标量创建(必须指定 index)
s5 = pd.Series(5, index=['a', 'b', 'c'])
 
# 从 range 创建
s6 = pd.Series(range(1, 5))
 
# 从生成器创建
s7 = pd.Series(i * 2 for i in range(5))

构造参数:

参数说明
data数据源:列表、元组、ndarray、字典、标量、range、生成器
index索引标签,需与数据长度一致,默认 RangeIndex
dtype数据类型,如 'int64'、'float64'、'object'、'category' 等
nameSeries 名称,后续可用于 to_frame() 的列名
copy是否复制输入数据,默认 False

1.2 属性

属性说明
values返回底层 NumPy 数组
array返回 ExtensionArray(支持 pandas 扩展类型)
dtype数据类型(如 int64、float64)
dtypes与 dtype 相同,统一接口
nameSeries 名称
index索引对象
axes返回 [index] 列表
shape形状元组,如 (4,)
size元素个数
ndim维度数,Series 恒为 1
nbytes底层数据字节数
memory_usage内存占用(含索引,可通过 deep=True 深度计算)
empty是否为空
hasnans是否包含 NaN
attrs全局属性字典(自定义元数据)
flags行为标志(如 allows_duplicate_labels)
s = pd.Series([1, 2, 3], name='数值')
print(s.values)        # [1 2 3]
print(s.dtype)         # int64
print(s.shape)         # (3,)
print(s.ndim)          # 1
print(s.size)          # 3
print(s.name)          # 数值
print(s.index)         # RangeIndex(start=0, stop=3, step=1)

1.3 索引与选择

索引方式:

方式语法说明
位置索引s[0]、s[1:3]按位置取值(Python 切片语义)
标签索引s.loc['a']、s.loc['a':'c']按标签取值,包含端点
位置索引s.iloc[0]、s.iloc[1:3]严格按位置取值,不包含端点
快速标量s.at['a']按标签取标量,速度最快
快速标量s.iat[0]按位置取标量,速度最快
布尔索引s[s > 2]使用布尔数组过滤

相关方法:

方法说明
s.get(key)获取标签对应的值,不存在时返回 None 或指定默认值
s.where(cond)条件为 False 的位置替换为 NaN 或其他指定值
s.mask(cond)where 的反操作:条件为 True 的位置替换为 NaN
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
 
s.loc['a']        # 10
s.iloc[0]         # 10
s.at['b']         # 20
s.iat[1]          # 20
s[s > 20]         # 筛选大于 20 的元素
s.get('x', -1)    # 不存在时返回 -1
s.where(s > 15)   # 不满足条件的位置为 NaN

1.4 转换

方法说明
astype(dtype)转换为指定数据类型
convert_dtypes()自动推断为最佳可空类型
infer_objects()推断更具体的 object 类型
copy()复制 Series(深拷贝)
to_numpy()转换为 NumPy 数组
to_list()转换为 Python 列表
to_frame()转换为 DataFrame
to_dict()转换为字典({索引: 值})
to_csv()输出到 CSV 文件
to_json()输出到 JSON
to_excel()输出到 Excel
to_pickle()序列化为 pickle 格式
item()单元素 Series 转为 Python 标量
keys()返回索引对象
items()返回 (索引, 值) 对的可迭代对象
s = pd.Series([1, 2, 3])
 
s.to_list()        # [1, 2, 3]
s.to_dict()        # {0: 1, 1: 2, 2: 3}
s.to_frame()       # DataFrame with one column
s.astype('float')  # 转换为 float64

1.5 方法

索引操作

方法说明
reindex(labels)按新索引重新排列,缺失索引填 NaN
reindex_like(other)按另一个 Series/DataFrame 的索引对齐
reset_index()索引重置为默认 RangeIndex
rename(index=...)重命名索引标签
rename_axis(name)设置或重命名索引轴名称
set_axis(labels)一次性替换索引
droplevel(level)删除 MultiIndex 的指定层级
swaplevel()交换 MultiIndex 的两个层级

排序

方法说明
sort_values()按值排序
sort_index()按索引排序
rank()计算排名(可指定方法:average、min、max 等)
nlargest(n)前 n 个最大值
nsmallest(n)前 n 个最小值
argsort()返回排序后的位置索引
searchsorted(v)查找值应插入的位置索引

去重

方法说明
duplicated()标记重复值
drop_duplicates()删除重复值
unique()返回唯一值数组
nunique()唯一值个数
value_counts()各值的频次统计

统计

方法说明
count()非缺失值个数
sum()求和
mean()均值
std()标准差
var()方差
min()最小值
max()最大值
median()中位数
mode()众数
quantile(q)分位数
sem()标准误差
skew()偏度
kurt()峰度
describe()综合统计摘要

累积

方法说明
cumsum()累积和
cumprod()累积积
cummin()累积最小值
cummax()累积最大值

差分

方法说明
diff()一阶差分(当前值 - 前值)
pct_change()百分比变化率

缺失值

方法说明
fillna(value)填充缺失值
dropna()删除缺失值
ffill()前向填充(用前一值填充)
bfill()后向填充(用后一值填充)
interpolate()插值填充(线性、多项式等)
replace(old, new)替换指定值

函数应用

方法说明
apply(func)对每个元素应用函数
map(func)元素级映射(常用于字典替换)
agg(func)聚合操作(可与 groupby 配合)
aggregate(func)agg 的完整别名
transform(func)对数据执行转换,保持形状
pipe(func)管道链式调用函数

其他

方法说明
clip(lower, upper)裁剪到指定范围
round(n)四舍五入到指定位数
abs()绝对值
add_prefix('x_')给索引添加前缀
add_suffix('_y')给索引添加后缀
compare(other)与另一个 Series 逐元素比较,输出差异
combine(other, func)按元素级合并运算
combine_first(other)用 other 中的值填充缺失值
dot(other)向量点积
equals(other)判断两个 Series 是否完全相等
factorize()将类别编码为数值型(类似 LabelEncoder)
explode()将单元格中的列表/元组展开为多行
isin(values)判断元素是否属于指定值集合
between(left, right)判断元素是否在闭区间内
sample(n)随机抽样
take(indices)按位置索引取值
tail(n)末尾 n 个元素
head(n)开头 n 个元素
first(offset)时间序列:返回开头直到 offset 的数据
last(offset)时间序列:返回从 offset 到末尾的数据
all()所有元素是否都为 True
any()任一元素是否为 True
prod()连乘积

示例:Series 常用方法演示

s = pd.Series([3, 1, 2, 2, np.nan])
 
s.value_counts()    # 频次统计
s.cumsum()          # 累积和
s.fillna(0)         # 填充缺失值
s.isin([1, 2])      # 判断是否在集合中
s.between(1, 2)     # 判断是否在闭区间内
s.sort_values()     # 按值排序