碎笔记
列出DataFrame中某一列的所有类
这里是统计bone_df的boneage列中所有年龄值,用到函数unique(),返回的是一个list列表
统计每一类出现的次数,使用的是counts函数,返回的是一个新的dataframe,这里对新的dataframe进行命名和赋予列名。
下面是对df中对某一列的值设定条件,返回满足的所有行,为dataframe形式,这里又提取age列的所有数据,values返回list列表
list使用append()添加元素,返回为none
新建列表list:
label = [ ]
添加元素:
label = label.append(‘male’)
返回:
none
改正:
label.append('male')
输出label:
[male]
也就是说append()只是在原来列表末尾添加元素,只是修改原来列表,并不是复制原来列表,不返回列表形式,所以用**=**输出,只是返回none,因为append没有返回值。
生成随机数的randint
通过随机生成的feed,作为列表索引,随机使用列表中的某一值
feed = random.randint(1, counts)
输出错误:list索引溢出
原因:randint(a, b)函数是生成【a,b】之间的整数,包括a,b
所以改正:
feed = random.randint(1, counts-1)
更改图片数组大小时,np.reshape和cv2.resize的不同
这里应用是把图片的一维数组形式改为二维数组形式,并且保存。
np.reshape(a, (800, 800))是对图片数组进行更改大小,这里的应用是把一维数组改为二维数组,不改变数组的值。
cv2.resize(a, (800, 800))把数组改为二维数组,并且要对数组的值进行插值操作,从而改变图片的大小。
直接采用cv2.resize对一维数组进行更改产生的图片:(完全没有图片内容)
使用np.reshape后再用cv2保存图片:
six.moves的用法
six是用来兼容python 2 和 3的工具,
six.moves 是用来处理在2 和 3里面函数的位置有变化的,直接用six.moves就可以屏蔽掉这些变化,
这里从six.moves中导入了cPickle包:使用 Python 进行对象的序列化与反序列化操作,直接将对象保存为二进制文本流在硬盘上,读取时不用再创建对象类,例如一些游戏程序,退出后再重新进入是退出时界面,保存了退出时的应用信息。
cPickle:用C语言编写的类,功能与pickle一样,但是速度却比pickle快得多。
主要函数:dump()、load()、dumps()、loads()
区别:
不带 s 的两个(即 dump() 和 load())方法会将数据序列化后保存至文件中, 然后再从文件中取出并反序列化后备用;
带 s 的两个(即 dumps() 和 loads())方法则会将数据序列化后以字符串的格式保存在内存中, 然后再将字符串格式的数据反序列化后备用;
具体使用:
train_pkl = open('data.pkl', 'wb')
cPickle.dump(X_train, train_pkl, protocol=cPickle.HIGHEST_PROTOCOL)
train_pkl.close()
dump写入时要包括文件名filename, 以及要存入的对象。
data = cPickle.load(open("test\\data.pkl","rb"))