当前位置: 首页 > 知识库问答 >
问题:

在数据帧上使用iloc,即使使用从数据帧派生的索引列表,也会产生越界错误

陆沈浪
2023-03-14

所以我有一个大约400,000列的数据帧。当我试图使用iloc获取所有数据时,它会抛出绑定错误。这是我尝试过的。

index\u second\u update=the\u data.index.tolist()

iloc[index\u second\u update]

Traceback (most recent call last):
  File "/home/dev/.local/lib/python3.6/site-packages/pandas/core/indexing.py",

第2130行,在获取列表中,轴返回self.obj.take(key,axis=axis)文件“/home/dev/.local/lib/python3.6/site packages/pandas/core/generic.py”,第3604行,在获取索引中,轴=self。获取块管理器轴(axis),验证=True文件“/home/dev/.local/lib/python3.6/site packages/pandas/core/internals/managers.py”,第1389行,在take indexer=maybe\u convert\u index(indexer,n)文件“/home/dev/.local/lib/python3.6/site packages/pandas/core/indexers.py”的第201行中,maybe\u convert\u index raiser(“索引超出范围”)indexer:索引超出范围

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/dev/.local/lib/python3.6/site-packages/pandas/core/indexing.py",

_getitem_axis(maybe_callable,轴=轴)File"/home/dev/. place/lib/python3.6/site-包/熊猫/core/indexing.py",第2148行,_getitem_axis返回自己。_get_list_axis(key,轴=轴)File"/home/dev/. place/lib/python3.6/site-包/Pandas/core/indexing.py",第2133行,_get_list_axis提升IndexError("位置索引器越界")

一些更多的细节:

Len(index_second_update)=446882

index\u second\u update==the\u data.index.tolist()

真实的

奇怪的是,它在大约20万行时崩溃了。在那之前,它工作得非常好。

共有1个答案

戎兴言
2023-03-14

df.loc通过每行的标签访问熊猫,不一定是行号。

下面的代码对您有用,它通过行标签访问数据

index_second_update = the_data.index.tolist()

the_data.loc[index_second_update]

或者更简单地说:

the_data.loc[the_data.index]

例如,在下面的数据框中查找非行号的索引时,行按名称进行标记。

import pandas as pd
csv = """\
Name,Birth Year
Joe,2000
Bill,1998
Mike,1996
Frank,1995"""
from io import StringIO

df = pd.read_csv(StringIO(csv))
df.set_index('Name')
        Birth Year
Name    
Joe     2000
Bill    1998
Mike    1996
Frank   1995
 类似资料:
  • 我有两个形状相同的python数据帧,例如: 我想使用df2中的值作为行索引来选择df1中的值,并创建一个形状相等的新数据帧。预期结果: 我已尝试使用.loc,它在单个列中运行良好: 但是我不能同时在所有列上使用. loc或. iloc。我想避免循环来优化性能,因为我正在处理一个大数据帧。有什么想法吗?

  • 我得到了一个具有多个列和行的数据帧df1。简单的例子: 我想创建一个空的数据框df2,然后再添加新的列和计算结果。 此时,我的代码如下所示: …添加两个新列: 有没有更好/更安全/更快的方法?是否可以创建一个空数据帧df2,并且只从df1复制索引?

  • 我有一个DF,其中包含一个巨大的可解析元数据,作为Dataframe中的单个字符串列,我们称之为DFA,使用ColmnA。 我想通过一个函数,ClassXYZ = Func1(ColmnA)将ColmnA这一列分成多个列。这个函数返回一个具有多个变量的类ClassXYZ,现在每个变量都必须映射到新的列,比如ColmnA1、ColmnA2等。 我如何通过调用Func1一次来完成从一个数据帧到另一个数

  • 我有2个数据帧在apache火花。 df 1有显示编号和说明。。。数据看起来像 不显示描述a这是米奇b唐纳德来了c玛丽和乔治回家d玛丽和乔治进城 第二个数据帧有字符 人物 乔治 唐纳德 玛丽 米妮 我需要搜索节目描述,找出哪个节目的特征是哪个角色... 最终输出应该如下所示 乔治|c,d 唐纳德|b 玛丽|c. d 米妮|不显示 这些数据集经过精心设计,非常简单,但它表达了我试图实现的搜索功能。我

  • 我有一个数据框,我正在使用TIA来填充彭博社的数据。当我看着df。索引我看到我打算成为列的数据以多索引的形式呈现给我。df的输出。列是这样的: 索引([u'column1','u'column2']) 我尝试过各种reset_index的迭代,但都无法补救这种情况。 1) TIA管理器如何使数据帧列作为索引读入? 2) 如何正确地将这些列标识为列而不是多索引? 我试图解决的最终问题是,当我尝试将此

  • 我有一个多索引数据框,看起来像 uid tid文本 abc x t1 bcd y t2 uid 和 tid 是索引。我有一个 uid 列表,并希望获取与该列表中的 uid 相对应的行,但保留第 2 级索引值 (tid)。我想在不运行任何显式循环的情况下执行此操作。这可能吗?