当前位置:  开发笔记 > 编程语言 > 正文

为什么.loc的行为会有所不同,具体取决于是打印还是分配值?

如何解决《为什么.loc的行为会有所不同,具体取决于是打印还是分配值?》经验,为你挑选了0个好方法。

我对以下行为感到困惑.当我有这样的数据帧时:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 4), columns=list('ABCD'), index=list('bcdefg'))

看起来如下:

          A         B         C         D
b -0.907325  0.211740  0.150066 -0.240011
c -0.307543  0.691359 -0.179995 -0.334836
d  1.280978  0.469956 -0.912541  0.487357
e  1.447153 -0.087224 -0.176256  1.319822
f  0.660994 -0.289151  0.956900 -1.063623
g -1.880520  1.099098 -0.759683 -0.657774

我收到了预期的错误

TypeError:无法对这些类型为'int'的索引器[3]进行切片索引

当我尝试使用以下切片时.loc:

print df.loc[3:, ['C', 'D']]

因为我传递一个整数作为索引,而不是包含在其中的一个字母index.

但是,如果我现在尝试

df.loc[3:, ['C', 'D']] = 10

它工作正常,并给我输出:

          A         B          C          D
b -0.907325  0.211740   0.150066  -0.240011
c -0.307543  0.691359  -0.179995  -0.334836
d  1.280978  0.469956  -0.912541   0.487357
e  1.447153 -0.087224  10.000000  10.000000
f  0.660994 -0.289151  10.000000  10.000000
g -1.880520  1.099098  10.000000  10.000000

我的问题是为什么在打印某些内容时相同的命令失败以及为什么它在分配值时起作用.当我检查doc字符串时.loc,我原本预计这会导致上面提到的错误(尤其是粗体部分):

允许的输入是:

单个标签,例如5'a'(注意,它5被解释为索引的标签,**从不作为索引的整数位置**).

标签列表或数组,例如['a', 'b', 'c'].

带有标签的切片对象,例如'a':'f'(注意,与通常的python切片相反,包括开始和停止!).

布尔数组.

callable使用一个参数(主叫系列,数据帧或面板),并且返回用于索引有效输出(上述之一)函数

.locKeyError当找不到物品时会提出.

任何解释; 我在这里想念的是什么?

编辑

在这个问题中,类似的行为被认为是在0.13中修复的错误.我用0.19.1.

编辑2 在@ EdChum的帖子上建立,可以做以下事情:

df.loc[2] = 20
df.loc[3] = 30
df.loc[4] = 40

产量

           A          B          C          D
b   0.083326  -1.047032   0.830499  -0.729662
c   0.942744  -0.535013   0.809251   1.132983
d  -0.074918   1.123331  -2.205294  -0.497468
e   0.213349   0.694366  -0.816550   0.496324
f   0.021347   0.917340  -0.595254  -0.392177
g  -1.149890   0.965645   0.172672  -0.043652
2  20.000000  20.000000  20.000000  20.000000
3  30.000000  30.000000  30.000000  30.000000
4  40.000000  40.000000  40.000000  40.000000

然而,这对我来说仍然令人困惑,因为

print df.loc['d':'f', ['C', 'D']]

工作正常,命令

print df.loc[2:4, ['C', 'D']]

给出上面提到的索引错误.

此外,当一个人现在分配这样的值

df.loc[2:4, ['C', 'D']] = 100

数据框如下所示:

           A          B           C           D
b   0.083326  -1.047032    0.830499   -0.729662
c   0.942744  -0.535013    0.809251    1.132983
d  -0.074918   1.123331  100.000000  100.000000
e   0.213349   0.694366  100.000000  100.000000
f   0.021347   0.917340   -0.595254   -0.392177
g  -1.149890   0.965645    0.172672   -0.043652
2  20.000000  20.000000   20.000000   20.000000
3  30.000000  30.000000   30.000000   30.000000
4  40.000000  40.000000   40.000000   40.000000

所以这些值不会添加到一个 - 或者至少我 - 期望它们被添加(使用位置而不是标签).

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有