"slice indices must be integers"拆分数据数组时出错
"slice indices must be integers" error when splitting a data array
你能帮我解决这个问题吗? x 已经是一个整数。但是我遇到了这个问题,如果我使用 90 而不是 x,代码运行但 x 变量不起作用。
split_ratio=[3,1,1]
x=split_ratio[0]/sum(split_ratio)*data.shape[0]
print(x)
print(data[0:x,:])
输出;
90.0
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-38-0e56a1aca0a0> in <module>()
2 x=split_ratio[0]/sum(split_ratio)*data.shape[0]
3 print(x)
----> 4 print(data[0:x,:])
TypeError: slice indices must be integers or None or have an __index__ method
从输出中可以看出该数字是浮点数(90.0
)而不是整数(90
)。只需转换为 int
就像 -
x=int(split_ratio[0]/sum(split_ratio)*data.shape[0])
无论何时除以 /
,它总是 returns float 而不是 integer,尽管答案可能是一个整数(小数点后没有任何内容)。
要解决这个问题,有两种方法,一种是使用int()
函数,另一种是使用floor division //
.
所以,你可以做
x=int(split_ratio[0]/sum(split_ratio)*data.shape[0])
或
x=split_ratio[0]//sum(split_ratio)*data.shape[0]
现在,当您执行 print(x)
时,输出将是 90
而不是 90.0
,因为 90.0
意味着它是一个浮点数,而 90
意味着现在它是一个整数。
在拼接字符串和列表等可迭代对象时,不能使用浮点数。
以下面的代码为例,不该做什么
例子
data = 'hello there'
#bad is a float since 4/3 1.333
bad = 4/3
#here bad is used as the end (`indexing[start:end:step]`).
indexIt = data[0:bad:1]
因为在应该是整数的地方使用了浮点数
结果
TypeError: slice indices must be integers or None or have an index method
解决此问题的方法是将 bad
的值包围在 int()
中,这应该转换 1.333 to 1
(浮点数到整数)
解决方案
data = 'hello there'
bad = int(4/3)
indexIt = data[0:bad:1]
print(indexIt)
结果
"h"
考虑到这一点,您的代码应该类似于
split_ratio=[3,1,1]
x=split_ratio[0]/sum(split_ratio)*data.shape[0]
print(x)
print(data[0:x:])
#注意:索引时x
后面的逗号要去掉
你能帮我解决这个问题吗? x 已经是一个整数。但是我遇到了这个问题,如果我使用 90 而不是 x,代码运行但 x 变量不起作用。
split_ratio=[3,1,1]
x=split_ratio[0]/sum(split_ratio)*data.shape[0]
print(x)
print(data[0:x,:])
输出;
90.0
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-38-0e56a1aca0a0> in <module>()
2 x=split_ratio[0]/sum(split_ratio)*data.shape[0]
3 print(x)
----> 4 print(data[0:x,:])
TypeError: slice indices must be integers or None or have an __index__ method
从输出中可以看出该数字是浮点数(90.0
)而不是整数(90
)。只需转换为 int
就像 -
x=int(split_ratio[0]/sum(split_ratio)*data.shape[0])
无论何时除以 /
,它总是 returns float 而不是 integer,尽管答案可能是一个整数(小数点后没有任何内容)。
要解决这个问题,有两种方法,一种是使用int()
函数,另一种是使用floor division //
.
所以,你可以做
x=int(split_ratio[0]/sum(split_ratio)*data.shape[0])
或
x=split_ratio[0]//sum(split_ratio)*data.shape[0]
现在,当您执行 print(x)
时,输出将是 90
而不是 90.0
,因为 90.0
意味着它是一个浮点数,而 90
意味着现在它是一个整数。
在拼接字符串和列表等可迭代对象时,不能使用浮点数。 以下面的代码为例,不该做什么
例子
data = 'hello there'
#bad is a float since 4/3 1.333
bad = 4/3
#here bad is used as the end (`indexing[start:end:step]`).
indexIt = data[0:bad:1]
因为在应该是整数的地方使用了浮点数
结果
TypeError: slice indices must be integers or None or have an index method
解决此问题的方法是将 bad
的值包围在 int()
中,这应该转换 1.333 to 1
(浮点数到整数)
解决方案
data = 'hello there'
bad = int(4/3)
indexIt = data[0:bad:1]
print(indexIt)
结果
"h"
考虑到这一点,您的代码应该类似于
split_ratio=[3,1,1]
x=split_ratio[0]/sum(split_ratio)*data.shape[0]
print(x)
print(data[0:x:])
#注意:索引时x
后面的逗号要去掉