python - 使用“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'>
我相信x
DataFrame 中的列会导致差异,但我不知道为什么。此外,是否可以使用 #1 语法并y
以整数形式获取值?
欢迎任何帮助。提前致谢。
解决方案
loc
选择行时返回 Pandas 系列对象。当系列具有混合类型时(在这种情况下) int
,float
所有整数都被转换为浮点数。
我想最简单的解决方案就是强制转换y_val
为int
:
_, y_val = df.loc[0, ['x', 'y']]
y_val = int(y_val)
或者你可以只选择y列,这样你就可以直接得到一个整数:
y_val = df.loc[0, "y"]
推荐阅读
- php - 如何将学生分配到 php 和 mysql 中的多个课程?
- meteor - 尽管有更改,但仍显示默认页面/前端未更新
- c++ - 特定进程句柄的内存地址与 exe 模块句柄之间的差异
- swift - 如何仅在一个视图控制器上专门禁用向后滑动
- php - Laravel Forge 500 内部服务器错误
- http - 使用客户端请求发送 406 是否有效 HTTP 没有 Accept 标头
- python - 如何使用 django 片段中的小部件?
- beyondcompare4 - Beyond Compare 4 - 没有为差异显示适当的食物
- java - 搜索字符串列表(100 000 个字符串):如果有 %,如何搜索 x 字符
- sql - 从联合所有查询中计算重复项