Python iloc给定索引器:单位置索引器在simple for循环中超出范围

Python iloc给定索引器:单位置索引器在simple for循环中超出范围,python,dataframe,Python,Dataframe,我的数据帧如下所示: df = 0 1 0.993995 2 1.111068 3 1.760940 . . . 49 40.253574 50 40.664486 51 41.083962 for idx,row in df.iterrows(): print(df[0].iloc[idx]) 我遍历每一行并打印每个元素。我的代码如下: df = 0 1 0.993995 2

我的数据帧如下所示:

df = 
          0
1      0.993995
2      1.111068
3      1.760940
.
.
.
49    40.253574
50    40.664486
51    41.083962
for idx,row in df.iterrows():
    print(df[0].iloc[idx])
我遍历每一行并打印每个元素。我的代码如下:

df = 
          0
1      0.993995
2      1.111068
3      1.760940
.
.
.
49    40.253574
50    40.664486
51    41.083962
for idx,row in df.iterrows():
    print(df[0].iloc[idx])
目前产出:

1.111068
1.76094
2.691832
.
.
40.664486
41.083962
Traceback (most recent call last):

  File "<ipython-input-46-80539a9081e5>", line 2, in <module>
    print(darkdf[0].iloc[idx])

  File "C:\Users\MM\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1500, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)

  File "C:\Users\MM\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 2230, in _getitem_axis
    self._validate_integer(key, axis)

  File "C:\Users\MM\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 2139, in _validate_integer
    raise IndexError("single positional indexer is out-of-bounds")

IndexError: single positional indexer is out-of-bounds
1.111068
1.76094
2.691832
.
.
40.664486
41.083962
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
打印(darkdf[0].iloc[idx])
文件“C:\Users\MM\Anaconda3\lib\site packages\pandas\core\index.py”,第1500行,在\uu getitem中__
返回self.\u getitem\u axis(可能可调用,axis=axis)
文件“C:\Users\MM\Anaconda3\lib\site packages\pandas\core\index.py”,第2230行,在\u getitem\u轴中
自我验证整数(键、轴)
文件“C:\Users\MM\Anaconda3\lib\site packages\pandas\core\index.py”,第2139行,在\u validate\u integer中
提升索引器(“单位置索引器超出范围”)
索引器:单个位置索引器超出范围

为什么这个简单的函数会给出错误。有人能帮我理解错误在说什么吗

您可能希望使用
loc
而不是
iloc
<代码>iloc使用基于零的行号,而不是索引。您的代码正在传递索引,这些索引超出了从零开始的行号范围,因此超出了范围。

选择的第一个正确方法是使用:

解决方案中的问题:

如果使用该功能,则按位置选择,而不是按标签选择

因此,您希望通过选择以下内容来选择第4行:

df[0].iloc[3]
但是没有
4.th
(python从0开始计数,所以对于select 4.th行需要3)行,所以引发了错误

如果使用:

df[0].loc[3]
它的工作原理与您预期的一样,因为选择索引
3
(不是不存在的位置4)和列
0
,但更好的是使用:

df.loc[idx, 0]

因为。

上一个stackoverflow问题的链接可能会有所帮助!我实际上在做行操作。这里我展示了简单的打印函数来解释我面临的问题。印刷不是我真正的目标。这个链接讨论打印。如何遍历rowsMmm很棘手,我自己试过了,很好。您是否可以打印(索引,df[0].iloc[idx])似乎索引不一致。这是否回答了您的问题?谢谢你的回复。你能告诉我,行号和索引都是一样的吗?嗨,很高兴看到你回答我的问题。你能告诉我为什么简单的iloc函数会出错吗?现在你的回答让我了解了iloc。非常感谢。我尝试了以下示例并理解了其中的区别:`df1=pd.DataFrame({“a”:[10,20,30]},index=[2,4,6])用于idx,df1.iterrows()中的行:print(df1.loc[idx,a”])`