生成csv文件用excel打开乱码和python读取少一行的问题及谷歌神器

本文介绍了解决CSV文件生成时遇到的显示问题,并使用XGBoost进行二分类任务的具体步骤,包括数据预处理、模型训练及预测等。

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

其实我记得我以前遇到过这个问题也记录下来过,但是忘记记录在哪个本子上了:顺利生成了csv文件,用Notepad打开是正常的,但用excel打开时就不是正常的。

当我用“\t”作为分隔符生成csv文件,然后用自带的工具打开时:正常如下


但用excel打开时却是:


然后我将"\t"改成了","就可以了,无论用什么工具打开csv都正常:


可以看到这个csv文件其实有400行839列的,但是在python里用pandas.read_csv()读出来却是:399X839?


这样生成的:

FILE *txtfile=fopen("/opt/jiaojiazao/posite/train.csv", "w");
	//ofstream txtfile("/opt/jiaojiazao_test/posite/test.txt",ios::out);
	for (int img_ind_pos = 0; img_ind_pos != 200; img_ind_pos++)
	{
		sprintf(srcimgs, "/opt/jiaojiazao/posite/%d.JPG", img_ind_pos);
		Mat src = imread(srcimgs,0);

		resize(src, trainHOG0, Size(64, 32));

		vector<float>descriptors0;
		descriptors0.clear();
		hog0.compute(trainHOG0, descriptors0, cv::Size(8, 8));

		equalizeHist(trainHOG0, trainHOG0);
		int newargu = calcLBPH(trainHOG0, pLBP0);

		Mat LBPH00;
		LBPH00 = spatial_histogram(pLBP0, 10, 4, 2, true);

		int label = 1;
		fprintf(txtfile,"%d,",label); //use "," instead of "\t"
		//txtfile << label << "\t";
		float f_testdata[DIM_OF_SAMPLE64X32] = { 0.0f };
		for (int i = 0; i < DIM_OF_SAMPLE64X32; i++)
		{
			if (i < DIM_OF_HOG64X32)
			{
				f_testdata[i] = descriptors0[i];
				fprintf(txtfile,"%f,",descriptors0[i]);
				//txtfile << descriptors0[i] << "\t";
			}
			else if (i < DIM_OF_HOG64X32+DIM_OF_LBP1)
			{
				f_testdata[i] = LBPH00.at<float>(0, i - DIM_OF_HOG64X32);
				fprintf(txtfile,"%f,",LBPH00.at<float>(0, i - DIM_OF_HOG64X32));
				//txtfile << LBPH00.at<float>(0, i - DIM_OF_HOG64X32) << "\t";
			}
			else if (i == DIM_OF_SAMPLE64X32 - 2)
			{
				f_testdata[i] = (float)src.rows*src.cols / 1000.0f;
				fprintf(txtfile,"%f,",(float)src.rows*src.cols / 1000.0f);
				//txtfile << (float)src.rows*src.cols / 1000.0f << "\t";
			}
			else
			{
				f_testdata[i] = max((float)src.rows / (float)src.cols, (float)src.cols / (float)src.rows);
				fprintf(txtfile,"%f\n",max((float)src.rows / (float)src.cols, (float)src.cols / (float)src.rows));
				//txtfile << max((float)src.rows / (float)src.cols, (float)src.cols / (float)src.rows) << endl;
			}
		}
	}
fclose(txtfile);
不知道为何读出来却掉了一行?

我知道原因了:因为csv的第一行是列名称column_name!!!并不算在数据里!!所以自己给每列命名一个就好了:


现在用pandas.read_csv()打开就正确了!

现在终于可以二分类了:

import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.cross_validation import train_test_split

#记录程序运行时间
import time 
start_time = time.time()

#读入数据
train = pd.read_csv("/opt/jiaojiazao/posite/train.csv")
train_sz = train.shape

train_xy,val = train_test_split(train, test_size = 0.3,random_state=1)

y = train_xy.Label
X = train_xy.drop(["Label"],axis=1)

val_y = val.Label
val_X = val.drop(["Label"],axis=1)

xgb_val = xgb.DMatrix(val_X,label=val_y)
xgb_train = xgb.DMatrix(X, label=y)

tests = pd.read_csv("/opt/jiaojiazao_test/posite/test.csv") 
xgb_test = xgb.DMatrix(tests)

params={
'booster':'gbtree',
'objective': 'binary:logistic', #多分类的问题
#'num_class':2, # 类别数,与 'objective': 'multi:softmax '并用
'gamma':0.6,  # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。
'max_depth':9, # 构建树的深度,越大越容易过拟合
'lambda':2,  # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
'subsample':0.7, # 随机采样训练样本
'colsample_bytree':0.9, # 生成树时进行的列采样
'min_child_weight':3, 
# 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言
#,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。
#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。 
'silent':0 ,#设置成1则没有运行信息输出,最好是设置为0.
'eta': 0.1, # 如同学习率
'seed':1000,
'nthread':7,# cpu 线程数
'eval_metric': 'error'
'reg_alpha':10
#'updater'= 'grow_gpu'
}
plst = list(params.items())
num_rounds = 150 # 迭代次数
watchlist = [(xgb_train, 'train'),(xgb_val, 'val')]

#训练模型并保存
# early_stopping_rounds 当设置的迭代次数较大时,early_stopping_rounds 可在一定的迭代次数内准确率没有提升就停止训练
model = xgb.train(plst, xgb_train, num_rounds, watchlist,early_stopping_rounds=100)
model.save_model('./model/xgb.model') # 用于存储训练出的模型
print ("best best_ntree_limit",model.best_ntree_limit )

preds = model.predict(xgb_test,ntree_limit=model.best_ntree_limit)

np.savetxt('xgb_submission.csv',np.c_[range(1,len(tests)+1),preds],delimiter=',',header='ImageId,Label',comments='',fmt='%d')

#输出运行时长
cost_time = time.time()-start_time
print ("xgboost success!",'\n',"cost time:",cost_time,"(s)......")




、********************************************************************************

之前同事介绍说用蓝灯可以谷歌,但蓝灯有流量限制还是不方便,而且经常连接不上;今天同事告诉我另一个神器:超厉害啊:


然后就可以愉快谷歌了:


如果不能,那请将浏览器换成谷歌浏览器,不要用什么360极速或者别的浏览器。哦耶!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元气少女缘结神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值