How to resolve an IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
How to resolve an IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
当我使用下面的代码时发生了 IndexError。详情如下所示。
def get_code(seq):
return [x.split('.')[0] for x in seq if x]
all_codes = get_code(all_cats)
code_index = pd.Index(np.unique(all_codes))
dummy_frame = df(np.zeros((len(data), len(code_index))), index=data.index, columns=code_index)
for row, cat in zip(data.index, data.CATEGORY):
codes = get_code(to_cat_list(cat))
dummy_frame.iloc[row, codes] = 1
data = data.join(dummy_frame.add_prefix('category_'))
data.iloc[:, 10:15]
下图是发生的 IndexError。
---------------------------------------------------------------------------
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
---------------------------------------------------------------------------
但是,错误发生在下面的代码行,
dummy_frame.iloc[row, codes] = 1
如何解决上述错误以获取以下信息。
category_1 100 non-null values
category_1a 100 non-null values
category_1b 100 non-null values
category_1c 100 non-null values
category_1d 100 non-null values
iloc
用于基于整数的索引并将 ["1", "3"]
传递给它作为列索引器部分是它失败的原因。您可以获得整数索引,即 ["1", "3"]
在框架列中的位置并传递:
# these are integer positions of `codes` so that `iloc` works
codes_positions = dummy_frame.columns.get_indexer(codes)
# using `codes_positions` instead of `codes` directly
dummy_frame.iloc[row, codes_positions] = 1
还有 loc
查找基于标签的索引而不是整数。看来你的行索引是 0..N-1
所以 loc
也可以在这里工作:
# indexers remain the same but now using `loc`
dummy_frame.loc[row, codes] = 1
但请注意,仅当索引条目为整数时(在您的情况下似乎如此),loc
才可以替代 iloc
。否则,第一种方法更通用,更不容易出错并且更能阐明意图。
当我使用下面的代码时发生了 IndexError。详情如下所示。
def get_code(seq):
return [x.split('.')[0] for x in seq if x]
all_codes = get_code(all_cats)
code_index = pd.Index(np.unique(all_codes))
dummy_frame = df(np.zeros((len(data), len(code_index))), index=data.index, columns=code_index)
for row, cat in zip(data.index, data.CATEGORY):
codes = get_code(to_cat_list(cat))
dummy_frame.iloc[row, codes] = 1
data = data.join(dummy_frame.add_prefix('category_'))
data.iloc[:, 10:15]
下图是发生的 IndexError。
---------------------------------------------------------------------------
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
---------------------------------------------------------------------------
但是,错误发生在下面的代码行,
dummy_frame.iloc[row, codes] = 1
如何解决上述错误以获取以下信息。
category_1 100 non-null values
category_1a 100 non-null values
category_1b 100 non-null values
category_1c 100 non-null values
category_1d 100 non-null values
iloc
用于基于整数的索引并将 ["1", "3"]
传递给它作为列索引器部分是它失败的原因。您可以获得整数索引,即 ["1", "3"]
在框架列中的位置并传递:
# these are integer positions of `codes` so that `iloc` works
codes_positions = dummy_frame.columns.get_indexer(codes)
# using `codes_positions` instead of `codes` directly
dummy_frame.iloc[row, codes_positions] = 1
还有 loc
查找基于标签的索引而不是整数。看来你的行索引是 0..N-1
所以 loc
也可以在这里工作:
# indexers remain the same but now using `loc`
dummy_frame.loc[row, codes] = 1
但请注意,仅当索引条目为整数时(在您的情况下似乎如此),loc
才可以替代 iloc
。否则,第一种方法更通用,更不容易出错并且更能阐明意图。