Python 尝试调用单元格值时,为什么我的列值列表被解释为索引值?

Python 尝试调用单元格值时,为什么我的列值列表被解释为索引值?,python,pandas,dataframe,indexing,series,Python,Pandas,Dataframe,Indexing,Series,我需要用下面的数据框做一些数学运算。在遍历值列单元格的for循环中,我需要获取相应的FracDist VALUE FracDist 0 11 0.022133 1 21 0.021187 2 22 0.001336 3 23 0.000303 4 24 0.000015 5 31 0.000611 6 41 0.040523 7 42 0.285630 8 43 0.161956

我需要用下面的数据框做一些数学运算。在遍历值列单元格的for循环中,我需要获取相应的FracDist

    VALUE  FracDist
0      11  0.022133
1      21  0.021187
2      22  0.001336
3      23  0.000303
4      24  0.000015
5      31  0.000611
6      41  0.040523
7      42  0.285630
8      43  0.161956
9      52  0.296993
10     71  0.160705
11     82  0.008424
12     90  0.000130
13     95  0.000053
首先,我列出了一个可以在for循环中使用的值列表,它按预期工作:

IN: LCvals = df['VALUE'].tolist()
    print LCvals
OUT: [11, 21, 22, 23, 24, 31, 41, 42, 43, 52, 71, 82, 90, 95]
当我试图根据for循环所在行的值从数据帧的FracDist列中获取单元格时,就会出现问题。代码没有使用VALUE列中的VALUE来查找行,而是尝试使用VALUE作为索引来查找行。所以我得到的是:

IN:    for val in LCvals:
            print val
            print LCdf.loc[val]['FracDist']

OUT:    11
        0.00842444155517
        21
        KeyError: 'the label [21] is not in the [index]'
请注意,为VALUE=11抓取的FracDist行来自索引11,而不是值11


循环代码根据值列中的值而不是索引中的点来查询行需要做哪些更改?

如果将整数传递到
.loc
,它将返回(在本例中)位于该索引处的值。您可以使用这个
LCdf.loc[LCdf['VALUE']==val]['FracDist']

编辑:以下是一个更好(更有效)的答案:


如果将整数传递到
.loc
,它将返回(在本例中)位于该索引处的值。您可以使用这个
LCdf.loc[LCdf['VALUE']==val]['FracDist']

编辑:以下是一个更好(更有效)的答案:


这里
pd.DataFrame.loc
将首先按行标签索引,然后,如果提供了第二个参数,则按列标签索引。这是故意的。另见

在任何情况下都不要使用链接索引。例如,不建议使用布尔索引,然后通过
LCdf.loc[LCdf['VALUE']==val]['FracDist']]
选择列标签

如果希望迭代单个系列,可以使用。但是这里您使用的是
'VALUE'
,就好像它是一个索引一样,所以您可以先使用
设置索引

for val, dist in df.set_index('VALUE')['FracDist'].items():
    print(val, dist)

11 0.022133
21 0.021187
...
90 0.00013
95 5.3e-05

这里
pd.DataFrame.loc
将首先按行标签索引,然后,如果提供了第二个参数,则按列标签索引。这是故意的。另见

在任何情况下都不要使用链接索引。例如,不建议使用布尔索引,然后通过
LCdf.loc[LCdf['VALUE']==val]['FracDist']]
选择列标签

如果希望迭代单个系列,可以使用。但是这里您使用的是
'VALUE'
,就好像它是一个索引一样,所以您可以先使用
设置索引

for val, dist in df.set_index('VALUE')['FracDist'].items():
    print(val, dist)

11 0.022133
21 0.021187
...
90 0.00013
95 5.3e-05

虽然这个答案以最简单的形式让我回到了正轨,但我将另一个标记为已被接受,因为它向我指出了一些我还不知道的关键概念,这些概念将帮助我完成本课程的其余部分。无论如何谢谢你!虽然这个答案以最简单的形式让我回到了正轨,但我将另一个标记为已被接受,因为它向我指出了一些我还不知道的关键概念,这些概念将帮助我完成本课程的其余部分。无论如何谢谢你!我可能早就接受了!运行此操作时,我会得到错误:
AttributeError:'Series'对象没有属性'items'
,如果我删除。我得到的项
TypeError:'numpy.float64'对象不可编辑
,我想这是指值为vals的问题。我需要
.iteritems()
而不是
.items()
。现在它开始工作了@cr0,是的,我想这和熊猫有关。我已经添加了一个到文档的链接。我可能太快就接受了!运行此操作时,我会得到错误:
AttributeError:'Series'对象没有属性'items'
,如果我删除。我得到的项
TypeError:'numpy.float64'对象不可编辑
,我想这是指值为vals的问题。我需要
.iteritems()
而不是
.items()
。现在它开始工作了@cr0,是的,我想这和熊猫有关。我已经添加了一个指向文档的链接。