首页 > 解决方案 > 使用“df.loc”时出现意外类型的值

问题描述

给定一个熊猫数据框如下

# python 3.8.2
import pandas as pd # 1.0.5

df = pd.DataFrame({'x': [0.5], 'y': [1]})

当我检查两列的类型时,它们是预期的 float64 和 int64 。

print(df.dtypes)
# x    float64
# y      int64
# dtype: object

但是,在连续提取y列的值时,根据我的使用方式,我得到了两种不同的类型df.loc

#1
_, y_val = df.loc[0, ['x', 'y']]
print(type(y_val)) # <class 'float'>, it is unexpected

#2
y_val = df.loc[0, 'y']
print(type(y_val)) # <class 'numpy.int64'>

我相信xDataFrame 中的列会导致差异,但我不知道为什么。此外,是否可以使用 #1 语法并y以整数形式获取值?

欢迎任何帮助。提前致谢。

标签: pythonpandasdataframe

解决方案


loc选择行时返回 Pandas 系列对象。当系列具有混合类型时(在这种情况下) intfloat所有整数都被转换为浮点数。

我想最简单的解决方案就是强制转换y_valint

_, y_val = df.loc[0, ['x', 'y']]
y_val = int(y_val)

或者你可以只选择y列,这样你就可以直接得到一个整数:

y_val = df.loc[0, "y"]

推荐阅读