You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas布尔切片同一指令结果不同:为何例1返回NaN例2无此情况?

问题解析:为什么两个布尔切片结果差异这么大?

这问题的核心原因完全在于两个DataFrame的索引类型不同!咱们一步步拆解来看:

1. 示例1的问题根源:不小心创建了多层索引

你在示例1里创建DataFrame时,给index参数传的是[list('abcd')]——注意这个外层的方括号!这会让Pandas生成一个只有单个层级的多层索引(MultiIndex),而不是普通的单层索引。

你可以打印data.index验证一下,输出会是:

MultiIndex([('a',),
            ('b',),
            ('c',),
            ('d',)],
           )

当你执行data[data['t'] >5]时,布尔筛选的逻辑在处理MultiIndex时会出现匹配偏差:虽然't'列能正确筛选出符合条件的行,但其他列无法和这个特殊的索引正确对齐,最终导致除了't'列之外的所有列都被填充为NaN。

2. 示例2为何正常?普通单层索引的正确匹配

示例2里的index直接传的是普通列表['Ohio', 'Colorado', 'Utah', 'New York'],生成的是标准的单层Index。这时候布尔筛选得到的布尔序列能和DataFrame的索引完美匹配,所有列都能正确保留符合条件的行,自然不会出现NaN。

3. 如何修正示例1?

只要去掉index参数的外层方括号,创建普通的单层索引就行:

import pandas as pd
import numpy as np

# 修正后的示例1代码
data = pd.DataFrame(np.arange(0,16).reshape(4,4), index=list('abcd'), columns=list('retz'))
print(data[data['t'] >5])

执行后会得到和示例2一致的正常结果:

r   e   t   z
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:03:13