为何我的DataFrame打印呈横向格式?如何调整为纵向展示?
解决KNN回归Performance DataFrame的格式与精度问题
我来帮你搞定这个DataFrame格式混乱和精度冗余的问题!你遇到的其实是两个小问题叠加导致的:一是嵌套数组被当作单个单元格传入DataFrame,所有数据挤在一行;二是Python浮点数二进制存储特性带来的精度溢出。下面直接给你解决方法和代码示例:
问题根源拆解
- 当你把形状为
(n,1)的二维数组(或嵌套列表)直接传给Pandas的DataFrame时,它会把整个数组/列表当作一个单元格的值,导致所有数据横向堆叠在一行里。 - 像
0.8000000000000007这种奇怪的数值,是浮点数在二进制存储时的精度限制导致的,属于Python常见现象,不是计算错误。
解决方案步骤
1. 展平嵌套数组/列表
不管你的数据是numpy数组还是Python嵌套列表,都需要先转成一维序列,让每个值对应DataFrame的一行:
- 若是numpy数组:用
.flatten()或.ravel()方法(两者效果类似,flatten()返回副本,ravel()返回视图) - 若是Python嵌套列表:用列表推导式提取每个子列表的唯一元素
2. 处理浮点数精度冗余
用Pandas的.round()方法直接指定保留的小数位数,就能去掉冗余的精度。
完整代码示例
先看你可能的错误写法:
import pandas as pd import numpy as np from sklearn.neighbors import KNeighborsRegressor # 模拟你的训练/测试数据 X_train = np.array([[1], [2], [3], [4], [5], [6]]) y_train = np.array([[5], [7], [9], [11], [13], [15]]) X_test = np.array([[7], [8]]) y_test = np.array([[10], [14]]) # 训练KNN模型 knn = KNeighborsRegressor(n_neighbors=1) knn.fit(X_train, y_train) preds = knn.predict(X_test) # 错误的DataFrame构建方式 performance = pd.DataFrame({ 'True Value': y_test, 'Prediction': preds, 'Error': y_test - preds }) print(performance)
这段代码会输出你看到的横向格式和冗余精度。
现在看修正后的代码:
# 修正:展平数组并处理精度 true_values = y_test.flatten() predictions = preds.flatten() errors = (y_test - preds).flatten() # 构建正确的DataFrame并保留1位小数 performance = pd.DataFrame({ 'True Value': true_values, 'Prediction': predictions, 'Error': errors }).round(1) print(performance)
运行后会得到你期望的输出:
True Value Prediction Error 0 10 9.2 0.8 1 14 9.2 4.8
如果是嵌套列表的情况
如果你的y_test和preds是Python嵌套列表(比如[[10], [14]]),可以用列表推导式展平:
y_test = [[10], [14]] preds = [[9.2], [9.2]] true_values = [val[0] for val in y_test] predictions = [val[0] for val in preds] errors = [true - pred for true, pred in zip(true_values, predictions)] performance = pd.DataFrame({ 'True Value': true_values, 'Prediction': predictions, 'Error': errors }).round(1)
效果和上面完全一致。
内容的提问来源于stack exchange,提问作者Tony Cardinal
相关产品推荐
相关产品推荐

