在pandas库中,Series是一维带标签的数组结构,实际数据处理时经常需要对两个或多个Series进行相加操作,其运算逻辑和普通的数值加法存在差异,核心是按照索引对齐后计算。

基础Series相加逻辑
当两个Series的索引完全相同时,相加操作会直接对应位置的元素求和,返回一个新的Series,索引保持不变。
import pandas as pd # 创建两个索引相同的Series s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c']) s2 = pd.Series([4, 5, 6], index=['a', 'b', 'c']) # 直接相加 result = s1 + s2 print(result) # 输出: # a 5 # b 7 # c 9 # dtype: int64
索引不匹配的相加逻辑
如果两个Series的索引不完全一致,相加时会先按照索引对齐,匹配到的索引对应元素相加,没有匹配到的索引位置结果会填充为NaN。
import pandas as pd s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c']) s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd']) result = s1 + s2 print(result) # 输出: # a NaN # b 7.0 # c 8.0 # d NaN # dtype: float64
处理缺失值的相加方式
如果不想让未匹配的索引位置出现NaN,可以使用add()方法并指定fill_value参数,给缺失的索引位置填充默认值后再计算。
import pandas as pd s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c']) s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd']) # 缺失值填充为0后再相加 result = s1.add(s2, fill_value=0) print(result) # 输出: # a 1.0 # b 7.0 # c 8.0 # d 6.0 # dtype: float64
多个Series相加
多个Series相加的逻辑和单个相加一致,可以连续使用加法运算符,也可以结合add()方法处理缺失值。
import pandas as pd s1 = pd.Series([1, 2], index=['a', 'b']) s2 = pd.Series([3, 4], index=['b', 'c']) s3 = pd.Series([5, 6], index=['c', 'd']) # 多个Series相加,填充缺失值为0 result = s1.add(s2, fill_value=0).add(s3, fill_value=0) print(result) # 输出: # a 1.0 # b 5.0 # c 9.0 # d 6.0 # dtype: float64
注意事项
- Series相加时索引的数据类型需要一致,否则会导致对齐失败,所有位置都返回
NaN - 如果Series中存储的是字符串类型,相加操作会执行字符串拼接,而非数值求和
- 使用
add()方法时,fill_value只会对当前两个Series运算时的缺失值生效,不会影响原Series的数据