Python PrettyTable 模块

本文介绍了Python的PrettyTable模块,用于以表格形式整洁地输出内容。详细讲解了如何创建表、添加元素、设置输出格式及控制表样式,包括ASCII和HTML表,以及调整对齐方式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python PrettyTable 模块

简介

Python通过PrettyTable模块可以将输出内容如表格方式整齐地输出。

安装

pip install prettytable

示例

from prettytable import PrettyTable
table = PrettyTable(["animal", "ferocity"])
table.add_row(["wolverine", 100])
table.add_row(["grizzly", 87])
table.add_row(["Rabbit of Caerbannog", 110])
table.add_row(["cat", -1])
table.add_row(["platypus", 23])
table.add_row(["dolphin", 63])
table.add_row(["albatross", 44])
table.sort_key("ferocity")
table.reversesort = True
print(table)

'''效果图
+----------------------+----------+
|        animal        | ferocity |
+----------------------+----------+
| Rabbit of Caerbannog |   110    |
|      wolverine       |   100    |
|       grizzly        |    87    |
|       dolphin        |    63    |
|      albatross       |    44    |
|       platypus       |    23    |
|         cat          |    -1    |
+----------------------+----------+
'''

使用

创建表

直接创建
pt = PrettyTable()
从已有文件创建
CSV
from
from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score,confusion_matrix from prettytable import PrettyTable import numpy as np X=np.matrix('1 0.1;2 0.9;2 0.4;4 0.9;5 0.4;\ 6 0.4;6 0.8;6 0.7;7 0.2;7 0.8;\ 7 0.9;8 0.1;8 0.6;8 0.8;3 0.9;\ 8 0.5;7 0.2;4 0.5;4 0.7;2 0.9') y_true=np.matrix('0; 0; 0; 1; 0;\ 0; 1; 1; 0; 1;\ 1; 0; 1; 1; 0;\ 1; 0; 0; 1; 1') #导入数据,并设置训练和测试数据比例为8:2 X_train, X_test, y_train, y_test = train_test_split(X, np.ravel(y_true),test_size=0.2) reg = LogisticRegression(C=1e5, solver='lbfgs') #训练 reg.fit(X_train,y_train) #测试 y_pred=reg.predict(X_test) print('test accuracy:\n',accuracy_score(y_test,y_pred)) #打印模型精度 print('weights:\n', reg.coef_, '\nbias:\n', reg.intercept_) #打印模型参数 pre=reg.predict(X) cm = confusion_matrix(y_true, pre) print("confusion_matrix:") #打印混淆矩阵 cm_table = PrettyTable(["","predict: 0 class", "predict: 1 class"]) cm_table.add_row(["true: 0 class",cm[0,0], cm[0,1]]);cm_table.add_row(["true: 1 class",cm[1,0], cm[1,1]]) print(cm_table) 这是我的代码,,他报了这样的错误C:\Users\Administrator\PycharmProjects\pythonProject\.venv\Scripts\python.exe D:\ex342.py Traceback (most recent call last): File "D:\ex342.py", line 18, in <module> reg.fit(X_train,y_train) File "C:\Users\Administrator\PycharmProjects\pythonProject\.venv\Lib\site-packages\sklearn\base.py", line 1389, in wrapper return fit_method(estimator, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\PycharmProjects\pythonProject\.venv\Lib\site-packages\sklearn\linear_model\_logistic.py", line 1222, in fit X, y = validate_data( ^^^^^^^^^^^^^^ File "C:\Users\Administrator\PycharmProjects\pythonProject\.venv\Lib\site-packages\sklearn\utils\validation.py", line 2961, in validate_data X, y = check_X_y(X, y, **check_params) ^^^
最新发布
03-15
<think>嗯,用户在使用sklearn的LogisticRegression时遇到了fit方法报错,提示数据验证问题。我需要先回忆一下常见的导致数据验证错误的原因。首先,输入的数据类型是否正确?比如是否应该是数值型而不是字符串或者其他类型。其次,数据中是否存在缺失值NaN或者无穷大inf的情况,这些都会导致验证失败。还有数据的形状是否正确,特征矩阵X和标签y的样本数是否一致。另外,是否需要先进行数据预处理,比如标准化或者处理分类变量? 然后想到,用户可能需要检查输入数据的维度。例如,X是否是一个二维数组,而y是一维数组。如果用户不小心将X转换成一维,就会出错。还要看看是否有特殊字符或非数值数据混入,比如某些列是字符串而没有进行编码。 再考虑数据预处理步骤,比如使用StandardScaler进行标准化,或者用OneHotEncoder处理分类变量。如果用户的数据中包含分类变量而没有正确处理,fit时就会报错。此外,样本数量是否足够,比如在划分训练集和测试集后,训练样本数是否少于某个阈值,或者类别不平衡问题是否影响了算法的收敛。 另外,可能需要检查scikit-learn的版本,因为不同版本的参数设置可能有变化,比如是否需要在初始化LogisticRegression时设置特定的solver,或者是否某些参数被弃用。例如,旧版本可能默认使用liblinear,而新版本可能有其他推荐选项。 然后想到具体的解决方案步骤。第一步应该是检查数据形状,用X.shape和y.shape确认样本数一致。第二步是检查缺失值和数据类型,用isnull().sum()和dtypes查看。第三步是处理分类变量,可能需要标签编码或独热编码。第四步是数据标准化,尤其是当特征量纲差异大时。第五步是检查标签y是否为正确格式,比如二分类问题需要0和1的编码,多分类可能需要特定的整数标签。 可能的错误示例包括,用户可能将DataFrame中的某一列作为y,但该列存在缺失值,或者数据类型是object。或者X中存在字符串列,比如“男”、“女”没有转换为数值。此外,如果用户使用了管道,可能在某个步骤中处理不当导致数据格式问题。 最后,需要提醒用户使用try-except块来捕获错误信息,这样可以更准确地定位问题。另外,建议用户查看官方文档,确认参数的设置是否正确,特别是solver的选择是否与数据特性兼容,比如某些solver不支持L1正则化,或者需要设置multi_class参数等。</think>### 解决方案:LogisticRegression fit方法数据验证问题 #### 1. **检查输入数据类型** - **问题原因**:`sklearn`要求输入数据为数值型矩阵(`numpy.ndarray`或类似结构),若数据包含字符串、缺失值(NaN)或无穷大(inf),会触发数据验证错误。 - **解决方法**: ```python import pandas as pd from sklearn.linear_model import LogisticRegression # 检查缺失值 print("缺失值数量:", pd.DataFrame(X).isnull().sum()) # 检查数据类型 print("特征数据类型:", X.dtypes) # 转换为数值矩阵(如使用Pandas) X = X.astype(float) ``` #### 2. **验证数据形状** - **问题原因**:特征矩阵`X`必须是二维数组(样本数×特征数),标签`y`必须是一维数组。若维度不匹配(如`X`为一维),会报错。 - **解决方法**: ```python # 检查形状 print("X的形状:", X.shape) # 应为(n_samples, n_features) print("y的形状:", y.shape) # 应为(n_samples,) # 修正维度(例如将一维X转为二维) X = X.reshape(-1, 1) ``` #### 3. **处理分类变量** - **问题原因**:若特征包含分类变量(如字符串标签),需编码为数值。未处理会导致数据验证失败。 - **解决方法**: ```python from sklearn.preprocessing import LabelEncoder, OneHotEncoder # 标签编码(针对有序分类) le = LabelEncoder() y_encoded = le.fit_transform(y) # 独热编码(针对无序分类特征) encoder = OneHotEncoder() X_encoded = encoder.fit_transform(X_categorical) ``` #### 4. **标准化数据** - **问题原因**:逻辑回归对特征尺度敏感,未标准化可能导致数值不稳定或收敛问题。 - **解决方法**: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) model = LogisticRegression() model.fit(X_scaled, y) ``` #### 5. **检查标签一致性** - **问题原因**:多分类任务中标签需为整数且从0开始连续编码(如0,1,2),若存在无效标签(如字符串或跳跃值),会报错。 - **解决方法**: ```python # 检查标签唯一值 print("唯一标签值:", np.unique(y)) # 重新编码标签(例如将["cat", "dog"]转为[0,1]) y = np.where(y == "cat", 0, 1) ``` --- ### 错误示例与修复 **报错信息示例**: ``` ValueError: Input contains NaN, infinity or a value too large for float64. ``` **修复代码**: ```python # 替换缺失值 from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy="mean") X = imputer.fit_transform(X) ``` --- ### 验证流程总结 1. 检查数据完整性:缺失值、无穷值 2. 确认数据维度:`X`为二维,`y`为一维 3. 转换分类变量:编码为数值 4. 标准化数据:提升模型收敛性 5. 验证标签格式:连续整数编码 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值