import numpy as np
t1 = np.arange(200).reshape((10,20))
简单了解下numpy中读取数据的方法
pandas中有更为强大的方法,
一般从csv文件中读取数据
# 从文本文件中读取内容
# fname路径
# dtype数据类型
# delimiter分隔字符串,默认空格. csv中使用,
# skiprows跳过X行,一般跳过第一行表头
# usecols 读取指定的列,索引,元祖类型
# unpack 转置 如果True 读入属性将分别写入不同的数组变量,False读入数据只写入一个数组变量,默认False
np.loadtxt(fname="path",dtype=np.float,delimiter="分割字符串,默认空格",
skiprows=0,usecols=None,unpack=False)
转置的三种方式
t2 = t1.swapaxes(1,0)
t3 = t1.T
t4 = t1.transpose()
对矩阵进行切片与索引操作
# 取行
# print(t1[1])
# 取连续多行
# print(t1[2:])
# 取不连续多行,用两个方括号包含多个索引值
# print(t1[[2,8,10]])
# 通用写法,加逗号.
# 前面行,后面列
# :表示每列都要
# print(t1[1,:])
# print(t1[2:,3:])
# print(t1[[2,8,10],:])
# 取列
# print(t1[:,0])
# 取连续多列
# print(t1[:,2:])
# 取不连续多列
# print(t1[:,[0,3]])
# 取行列
# print(t1[2,3])
# a = t1[2,3]
# print(a.dtype)
# 取3-5行,2-4列
# 取的是行列交叉点的位置
# print(t1[2:5,1:])
# 取多个不相邻的点,只有两个点
# 取的是(0,0) (2,1)
# print(t1[[0,2],[0,1]])
# bool索引
# 在布尔索引中,会将所有满足条件的值返回
# 这里就是将所有满足条件的数进行改值
# t1[t1>100] = 100
# print(t1)
改值
# 修改位置在3,3上的数值
# t1[3,3] = 0
# print(t1[3,3])
# 三元运算符
# 小于150赋值100,其余赋值300
# t2 = np.where(t1<150,100,300)
# print(t2)
# 裁剪,clip
# 小于XX的都换成XX,大于YY的都替换成YY
# t3 = t1.clip(10,18)
# print(t3)
数据拼接
t1 = np.arange(12).reshape(2,6)
t2 = np.arange(12).reshape(2,6)
# 竖直拼接
t3 = np.vstack((t1,t2))
# 水平拼接
t4 = np.hstack((t1,t2))
# 构建全为0的矩阵
t5 = np.zeros((3,4))
# 构建全为1的矩阵
t6 = np.ones((3,4))
# 构建对角线为1的n阶方阵
t7 = np.eye(4)
nan具有特性: numpy.nan != numpy.nan
可以通过这个特性来找出矩阵中nan的个数
# 第一种方式,可以得出nan的个数
num1 = np.count_nonzero(t1 != t1)
# 第二种方式,可以得出nan的位置
num2 = t1[np.isnan(t1)]
对于一个矩阵,需要将其中的nan替换为列的均值时,可以用以下方法
def fill_with_avg(array):
col_nums = array.shape[1]
for i in col_nums:
temp_col = array[:,i]
nan_nums = np.count_nonzero(temp_col != temp_col)
if nan_nums != 0:
temp_col[np.isnan(temp_col)] = temp_col[temp_col==temp_col].mean()
return array