gpt4 book ai didi

python - .loc 索引改变类型

转载 作者:行者123 更新时间:2023-11-28 17:17:38 28 4
gpt4 key购买 nike

如果我有一个 pandas.DataFrame具有不同类型的列(例如 int64float64 ),从 int 获取单个元素列 .loc索引将输出转换为 float :

import pandas as pd
df_test = pd.DataFrame({'ints':[1,2,3], 'floats': [4.5,5.5,6.5]})

df_test['ints'].dtype
>>> dtype('int64')

df_test.loc[0,'ints']
>>> 1.0

type(df_test.loc[0,'ints'])
>>> numpy.float64

如果我使用 .at对于索引,它不会发生:

type(df_test.at[0,'ints'])
>>> numpy.int64

当所有列都是 int 时也不会发生这种情况:

df_test = pd.DataFrame({'ints':[1,2,3], 'ints2': [4,5,6]})
df_test.loc[0,'ints']
>>> 1

这是 pandas 的一些核心属性的结果吗?索引?换句话说,它是一个功能的错误吗? :)

更新:原来,it is a bug它将在 pandas 0.20.0 中修复.

最佳答案

这里的问题是 loc 最初是隐式地尝试返回一个 Series,即使您返回的是单个列,因此返回的是该行的标量值 dtype 正在被升级为支持该行所有 dtype 的 dtype,如果您只选择该列并使用 loc 则它不会转换:

In [83]:
df_test['ints'].loc[0]

Out[83]:
1

你可以看到当你没有子选择时会发生什么:

In [84]:
df_test.loc[0]

Out[84]:
floats 4.5
ints 1.0
Name: 0, dtype: float64

这可能是不可取的,我认为这可能是一个 github 问题

这个issue有点相关

关于python - .loc 索引改变类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366763/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com