以下代码给出TypeError。
from sklearn.model_selection import KFold
kf = KFold(n_splits=5,shuffle=False).split(range(25))
print('{} {:^61} {}'.format('Iteration','Training set observations','Testing set observations'))
for iteration, data in enumerate(kf, start=3):
print('{:^9} {} {:^25}'.format(iteration, data[0], data[1]))
TypeError:不支持的格式字符串传递给 numpy.ndarray。格式
当我们使用str(data[1])
为什么需要这种显式的字符串转换?
答案 0 :(得分:2)
例如https://docs.python.org/3.4/library/string.html#format-specification-mini-language中的
通常的约定是,空格式字符串(
""
)会产生与您在值上调用str()
相同的结果。非空格式字符串通常会修改结果。
因此,当:^25
与data[1]
匹配时,它将调用__format__()
对象的data[1]
方法,该对象是numpy.ndarray
。这些对象遵循Python的list
行为,即格式字符串为非空时会引发TypeError
。空格式字符串会导致在str()
上调用data[0]
(在您的示例中),这样就可以了。非空格式字符串(即:^25
的{{1}})在Python的列表中失败,因为Python中的标准列表可以是异类对象的集合,因此是单个格式规范可能不适用于以下列表:data[1]
。 [1, 2.3, 'four']
遵循相同的约定。
也请参见https://github.com/numpy/numpy/issues/5543,以获取numpy
的{{1}}页面上的未解决问题。似乎该问题与您在帖子中提到的同一问题有关。