如何将列表赋值给Pandas Series的多个元素?
Pandas布尔索引赋值嵌套列表的问题
错误代码示例
import pandas as pd series = pd.Series([[1, 2], [], [4, 5]]) series[[True, False, False]] = [0, 0, 0, 0, 0]
报错原因
执行上述代码会失败,因为Pandas默认会将右侧列表的元素逐一映射到布尔索引选中的Series元素上,但实际需求是将整个列表作为单个值,赋值给布尔索引为True的元素,期望得到结果:pd.Series([[0, 0, 0, 0, 0], [], [4, 5]])。
解决方法
要实现需求,需要将右侧的目标列表包装成嵌套结构,让Pandas识别为单个值进行赋值:
import pandas as pd series = pd.Series([[1, 2], [], [4, 5]]) # 用.loc明确索引,并将目标列表嵌套在一层列表中 series.loc[[True, False, False]] = [[0, 0, 0, 0, 0]]
如果布尔索引仅选中单个元素,也可以直接使用.at进行精准赋值:
series.at[0] = [0, 0, 0, 0, 0]
内容的提问来源于stack exchange,提问作者rdong8
相关产品推荐
相关产品推荐

