经常用到切片操作, 所以把之前这方面的笔记汇总一下
参考: https://blog.****.net/weixin_39861498/article/details/109621657
a[start:end:step]
逆序
[0:4:-1]
前两个数字代表范围(取下标0,1,2,3), 最后一个代表步长, -1时倒序
取最后几个元素
a = [1, 2, 3, 4, 5, 6]
a[-1] # 6
a[-2:] # [5, 6]
a[:-2] # [1, 2, 3, 4]
a[-2:-4] # []
a[-4:-2] # [3, 4]
在正向截取列表时,start的索引位置必须在end的索引位置的前面
a = [1, 2, 3, 4, 5, 6]
a[:-3:-1] # [6, 5]
a[1::-1] # [2, 1]
a[-2:-3:-1] # [5]
a[-4:-3:-1] # []
a[1:4:-1] # []
a[1:-1:-1] # []
step为负时,start的索引位置必须在end的索引位置的后面
此处要修改TCA代码取最后50个:
# 求特征变换矩阵A ind = np.argsort(w)#特征值排序后对应的索引(从小到大) A = V[:, ind[:-(tca.dim+1):-1]]#得到排序后特征值索引, 倒序取的最后dim(=30)列(最大的30个特征值), 从V中取其对应的特征向量组成矩阵 |
行列切片
单独取出一般情况的特征
tabel1=medical_data[['序列号','年龄','身高','体重','BMI','O型','A型','B型','AB型','RH(阳1阴0)','乙肝携带']] data_notnull = tabel1.loc[tabel1['身高'].notnull()] |
参考:
https://blog.****.net/wanglingli95/article/details/78887771
data['one':'two'] #当用已知的行索引时为前闭后闭区间,这点与切片稍有不同。 |
data['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型 data.w #选择表格中的'w'列,使用点属性,返回的是Series类型 data[['w']] #选择表格中的'w'列,返回的是DataFrame属性 |
为了确保loc是深拷贝, 辅助填充不影响原数据, 进行一个小尝试:
a=pd.DataFrame([[1,2]],columns=['one', 'two']) b=a.loc[:,'one'] b['one']=0 print("a:\n",a) |
a: one two 0 1 2 |
.loc[]语法
np多维数组分片时不用加iloc, dataframe需要.
.loc[行标签名/[行标签名list],列标签名/[列标签名list]],即有两个输入参数,第一个指定行名,第二个指定列名。当只有一个参数时,默认是行名(即抽取整行),所有列都选中
原来用的Interpolate是插值, 这里使用中位数median. 参考:
https://www.cnblogs.com/kuangkuangduangduang/p/10257167.html
df.fillna(df.mean()['C':'E']) # 对 C 列到 E 列用平均值填充 |
dataframe.fillna({'code':'code', 'date':'date'}),第一个code和date分别表示列,后面的表示在该列填充的内容 |
df = df["YY"][0:4].mean()#求YY列前三项 前四项均值 |
tabel1=medical_data[['序列号','年龄','身高','体重','BMI','O型','A型','B型','AB型','RH(阳1阴0)','乙肝携带']] data_notnull = tabel1.loc[tabel1['身高'].notnull()] |