Python Pandas按列名取值返回Series而非预期float64数值
返回Series类型的原因
这个结果是pandas的固定索引规则导致的,由两个叠加的逻辑决定:
- 你在
iloc中传入的是[[counter]](即带额外方括号的列表形式取行),这种写法哪怕只选中1行数据,返回的依然是保留完整行列结构的单行DataFrame,不会自动转换为一维结构。 - 对DataFrame执行
.列名操作时,无论列内包含多少个值,返回结果永远是和列长度对应的Series。哪怕这个列只有1个元素,也会保留Series自带的行索引、列名标识,不会直接输出裸数值。
获取单元格具体数值的实现方案
可以根据你现有的代码习惯选择以下任意一种方法:
- 调整iloc的取行写法,转换为行级Series后再取值
去掉包裹sorted_prediction_output.iloc[counter]["min_time_stamp"]counter的额外方括号后,iloc传入单个整数行号,返回的是整行构成的一维Series,直接按列名取值就能拿到纯数值。 - 通过iloc双参数形式直接定位单元格
sorted_prediction_output.iloc[ counter, sorted_prediction_output.columns.get_loc("min_time_stamp") ]iloc支持同时传入行位置、列位置的双参数,不需要硬编码列的整数序号,用get_loc动态匹配列名对应的位置,就能直接取出单元格的原始值。 - 保留原有代码的结构,对返回的单值Series提取首元素
这种写法完全兼容你之前的单行DataFrame选择逻辑,只要在最后加一步sorted_prediction_output.iloc[[counter]].min_time_stamp.iloc[0]iloc[0],就能从单值Series中取出实际的数值。
补充:易混淆的iloc传参差异
df.iloc[[行号]]:返回保留行列结构的DataFrame(哪怕仅1行)df.iloc[行号]:返回行方向的一维Seriesdf.iloc[行号, 列号]:直接返回对应位置的单元格值
内容的提问来源于stack exchange,提问作者Garet Jax
相关产品推荐
相关产品推荐

