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

提取DataFrame行时如何保留元素的int/float原始类型?

解决提取行时int类型变为float的问题

这个问题我之前也碰到过,本质是pandas中Series与DataFrame的类型机制差异导致的:当你用df.iloc[df['i'].argmin()]取出一行时,得到的是一个Series对象——而Series要求所有元素必须是同一数据类型,因为你的j列是float类型,所以i列的int会被自动向上转换为float,最终整行的dtype都变成了float,也就出现了0变成0.0的情况。

解决方案:保持结果为DataFrame格式

只需要把索引改成列表形式,让iloc返回一个单行的DataFrame,这样每列的原始数据类型就会被保留:

# 用列表包裹索引,返回DataFrame而非Series
min_row = df.iloc[[df['i'].argmin()]]

测试一下结果:

print(min_row)
#    i    j
# 0  0  0.3

print(min_row.dtypes)
# i      int64
# j    float64

可以看到i列依然保持了原始的int64类型。

替代方案:如果需要Series格式

如果你确实需要得到Series对象,可以手动将i元素转换回int类型:

min_row_series = df.iloc[df['i'].argmin()]
min_row_series['i'] = int(min_row_series['i'])

不过这种方法只适合单个元素的场景,更推荐第一种保持DataFrame的方案,能从根源上避免类型转换问题。

额外提示:用idxmin替代argmin

你也可以用df['i'].idxmin()直接获取最小值对应的行标签,再用loc取出,同样要注意用列表包裹索引来保留类型:

min_row = df.loc[[df['i'].idxmin()]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:22