看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 的广播机制(broadcasting)指的是在进行操作时,pandas 会在 DataFrame 和 Series 等结构之间智能对齐数据的形状,从而使不同维度的数据可以参与运算。广播的核心是通过索引对齐和扩展数据形状,实现类似 NumPy 的广播操作,同时保留 Pandas 的标签对齐特性。
索引对齐(Index Alignment):
NaN
作为缺失值。形状扩展:
以下是 Pandas 中的广播规则和常见场景:
DataFrame 和 Series 之间的操作通常会沿着 Series 的索引和 DataFrame 的列或行进行对齐。
行广播(沿列方向广播):
如果一个 DataFrame 和一个 Series 进行操作,且 Series 的索引与 DataFrame 的列对齐,那么广播会在每一行上进行。
示例:
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
s = pd.Series({'A': 10, 'B': 20})
result = df + s
print(result)
输出:
A B
0 11 24
1 12 25
2 13 26
列广播(沿行方向广播):
如果一个 Series 的索引与 DataFrame 的行索引对齐,Pandas 会沿列方向广播。
示例:
s = pd.Series([10, 20, 30], index=[0, 1, 2])
result = df.add(s, axis=0)
print(result)
输出:
A B
0 11 14
1 22 25
2 33 36
当 DataFrame 与标量(如单个数值)操作时,标量会扩展为与 DataFrame 形状一致的数组,逐个元素进行操作。
示例:
result = df * 2
print(result)
输出:
A B
0 2 8
1 4 10
2 6 12
Series 与标量操作时,标量会扩展为与 Series 长度一致的数组。
示例:
s = pd.Series([1, 2, 3])
result = s + 5
print(result)
输出:
0 6
1 7
2 8
dtype: int64
pandas 的广播机制在内部依赖 NumPy 的广播实现,但在广播之前会先进行索引对齐,确保标签正确匹配。
NaN
。示例(对齐演示):
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
}, index=['x', 'y', 'z'])
s = pd.Series({'A': 10, 'C': 30})
result = df + s
print(result)
输出:
A B C
x 11.0 NaN NaN
y 12.0 NaN NaN
z 13.0 NaN NaN
如果需要强制按某个轴进行广播,可以通过参数 axis
指定:
axis=0
:沿行方向广播(与每一列匹配)。axis=1
:沿列方向广播(与每一行匹配)。广播和索引对齐会导致较大的数据集生成更多的中间结果,从而影响性能。对于性能敏感的操作,可以考虑使用 numpy
的广播或调整数据结构。
更新时间:2024-12-03 08:30:15 标签:pandas python 广播