Numpy 最全介绍!!!建议收藏!!!(二)
一、文件操作
在numpy 中,为了处理大量的数据,通常使用.csv 或numpy 自带的.npy 文件
保存csv 文件
import numpy as np
scores = np.random.randint(0, 10, size=(20, 2))
print(scores)
np.savetxt("score.csv", scores, delimiter=",", header="英语,数学", comments="", fmt="%d")
读取csv 文件
sc = np.loadtxt("score.csv", dtype=np.int8, delimiter=",", skiprows=1)
print(sc)
在numpy 也可以直接使用自带的.npy 文件,操作简单,在实际开发中这个用的比较多
sc1=np.random.randint(0,10,size=(2,3))
np.save("sc1",sc1)
sc2=np.load("sc1.npy")
print(sc2)
二、读取csv 文件代码(实战版)
import numpy as np
def read_csv_demo1():
with open('score.csv', 'r') as fp:
reader = csv.reader(fp)
next(reader)
for x in reader:
English = x[0]
Math = x[1]
print({'English': English, 'Math': Math})
read_csv_demo1()
def read_csv_demo2():
with open('score.csv', 'r') as fp:
reader = csv.DictReader(fp)
for x in reader:
value = {'English': x['英语'], 'Math': x['数学']}
print(value)
read_csv_demo2()
sc1=np.random.randint(0,10,size=(2,3))
np.save("sc1",sc1)
sc2=np.load("sc1.npy")
print(sc2)
三、写入csv 文件代码(实战版)
import numpy as np
def write_csv_demo1():
headers = ['name', 'age', 'weight']
values = [
('张三', 18, 180),
('李四', 19, 190),
('王五', 20, 160)
]
with open('class.csv', 'w', encoding='utf-8', newline='')as fp:
writer = csv.writer(fp)
writer.writerow(headers)
writer.writerows(values)
def write_csv_demo2():
headers = ['name', 'age', 'weight']
values = [
{'name': '张三', 'age': 18, 'weight': 180},
{'name': '李四', 'age': 19, 'weight': 190},
{'name': '王五', 'age': 20, 'weight': 160},
]
with open('class.csv', 'w', encoding='utf-8', newline='')as fp:
writer = csv.DictWriter(fp, headers)
writer.writeheader()
writer.writerows(values)
write_csv_demo2()
四、NAN 和inf
NAN :Not a number ,不是一个数字的意思,但是属于浮点型
? 特点:np.NAN!=np.NAN
? NAN 和任何值运算结果都是NAN
? 作用:有些文档会出现缺失值,会影响数据的处理。因此我们删除缺失值或者用其他值填充来 处理缺失值
inf :Infinity,无穷大,也是浮点型
? 特点:np.inf 表示正无穷大,-np.inf 表示负无穷大,比如2/0
五、删除缺失值
import numpy as np
a = np.random.randint(0, 10, size=(3, 5))
print(a)
a = a.astype(np.float16)
a[0, 1] = np.NAN
print(a)
print(a / 0)
a[1, 2] = np.NAN
print(a)
print(a[~np.isnan(a)])
lines = np.where(np.isnan(a))
np.delete(a, lines, axis=0)
六、random
import numpy as np
np.random.seed(1)
a = np.random.randint(0, 10, size=(2, 3))
print(a)
print("=" * 30)
np.random.seed(1)
b = np.random.randint(0, 10, size=(2, 3))
c = np.random.randint(0, 10, size=(2, 3))
print(b)
print("=" * 30)
print(c)
print("=" * 30)
d = np.random.rand(2, 3, 4)
print(d)
e = np.random.randn()
print(e)
f = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result1 = np.random.choice(f, size=(2, 3))
result2 = np.random.choice(f, 3)
result3 = np.random.choice(10, 3)
g = np.arange(10)
np.random.shuffle(g)
print(g)
七、axis
前面为了方便大家理解,将axis=0代表行,将axis=1代表列
这里将带领大家深入理解axis
先上一张图
如图所示,最外面括号代表0,越往里层axis就依次加1,下面就来实际操作一下
import numpy as np
a = np.arange(0, 4).reshape(2, 2)
print(a)
print(a.sum(axis=0))
print(a.sum(axis=1))
b = np.arange(12).reshape(2, 6)
print(b)
print(b.max(axis=1))
print(b.max(axis=0))
print(np.delete(b, 0, axis=0))
八、常用函数
-
一元函数
函数 | 描述 |
---|
np.abs | 绝对值 | np.sqrt | 开根 | np.square | 平方 | np.exp | 计算指数(e^x) | np.log,np.log10,np.log2,np.log1p | 求以e为底,以10为低,以2为低,以(1+x)为底的对数 | np.sign | 将数组中的值标签化,大于0的变成1,等于0的变成0,小于0的变成-1 | np.ceil | 朝着无穷大的方向取整,比如5.1会变成6,-6.3会变成-6 | np.floor | 朝着负无穷大方向取证,比如5.1会变成5,-6.3会变成-7 | np.rint,np.round | 返回四舍五入后的值 | np.modf | 将整数和小数分隔开来形成两个数组 | np.isnan | 判断是否是nan | np.isinf | 判断是否是inf | np.cos,np.cosh,np.sin,np.sinh,np.tan,np.tanh | 三角函数 | np.arccos,np.arcsin,np.arctan | 反三角函数 |
-
二元函数
函数 | 描述 | |
---|
np.add | 加法运算(即1+1=2),相当于+ | | np.subtract | 减法运算(即3-2=1),相当于- | | np.negative | 负数运算(即-2),相当于加个负号 | | np.multiply | 乘法运算(即23=6),相当于 | | np.divide | 除法运算(即3/2=1.5),相当于/ | | np.floor_divide | 取整运算,相当于// | | np.mod | 取余运算,相当于% | | greater,greater_equal,less,less_equal,equal,not_equal | >,>=,<,<=,=,!=的函数表达式 | | logical_and | &的函数表达式 | | logical_or | \ | 的函数表达式 |
-
常用聚合函数 import numpy as np
np.random.seed(1)
a = np.random.uniform(-10, 10, size=(3, 5))
print(a)
print(np.sum(a, axis=0))
print(np.prod(a, axis=0))
print(np.mean(a, axis=0))
print(np.std(a, axis=0))
print(np.min(a, axis=0))
print(np.argmin(a, axis=0))
print(np.median(a))
-
常用布尔判断函数 import numpy as np
np.random.seed(1)
a = np.random.uniform(-10, 10, size=(3, 5))
print(a)
b = np.arange(0, 10)
print(b)
print(b.any())
print((a >= 0).any())
print(np.sort(a, axis=0))
b = np.random.randint(0, 10, size=(3, 5))
print(b)
b.sort()
print(b)
print(a)
print(np.argsort(a, axis=0))
print(-np.sort(-a))
indexes = np.argsort(-a)
print(np.take(a, indexes))
-
其他函数补充 import numpy as np
np.random.seed(1)
c = np.random.randint(0, 100, size=(3, 20))
print(c)
b = np.apply_along_axis(lambda x: x[np.logical_and(x != x.max(), x != x.min())].mean(), axis=0, arr=c)
print(b)
d = np.linspace(0, 1, 10)
print(d)
写在最后:
? 本人是大学学生一枚,若文中出现错误,欢迎莅临指正!这两篇文章是我看某站上《清华大佬终于把Python数据分析讲完了!从入门到精通保姆级教程》即兴而写,历时2天。
创作不易,还望各位大侠们一键三连~
|