让python更酷更实用一些~
记录一些黑魔法,比如正则表达式,或者各种库的应用,虽然感觉日后可能并无卵用。
暂时收录:
- pandas 对多属性约束下的数据筛选(比如接收到一份excel数据后对数据的快速清洗)。
- numpy的广播机制。
- pandas 将数据写入同一个excel文件的多个sheet表。
- numpy存取csv文件
- 在需要多次写入csv文件的情况下,如何保持不会产生空行
停止更新,并无卵用。(日后这里会记录numpy和pandas,等我用熟了再说)
如果对本文有疑问或者想找男朋友,可以联系我,点击此处有我联系方式。
pandas数据清洗
同时筛选属性COUNTY
取值为BLAND
和属性State
取值为VA
的数据,并且将筛选的多组数据写入同一个excel文件的不同sheet表。
1 | import pandas as pd |
numpy广播机制
在numpy广播机制的作用下,应该避免去写for
循环的程序,显得不够pythonic
而且浪费时间和计算力。
可以发现,在对矩阵和一个元素求和时,numpy会对一个元素进行复制填充,使得一个元素的维度和矩阵维度相同,下面的例子中a+10
中的10
被填充为[[10,10,10]]
。1
2
3
4
5
6
7
8
9a = np.array([[1,2,3]])
print(a)
>>>
[[1 2 3]]
print(a+10)
>>>
[[11 12 13]]
print(a.shape)
>>>(1,3)
同时也要避免矩阵维度不严格带来的BUG:
1
2
3
4
a = np.array([1, 2, 3]) #不推荐
b = np.array([[1, 2, 3]])
print(a.shape, b.shape)
>>>(3,) (1, 3)
1 | a = np.array([1, 2, 3]) #不推荐 |
广播机制的推广:
矩阵每一个元素除以对应列元素的和。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import numpy as np
test = np.random.randint(0, 100, size=(4,4))
>>>
[[91 25 41 37]
[82 72 86 25]
[29 38 31 22]
[74 88 54 44]]
test = test / test.sum(axis=0)
>>>
[[0.32971014 0.11210762 0.19339623 0.2890625 ]
[0.29710145 0.32286996 0.40566038 0.1953125 ]
[0.10507246 0.17040359 0.14622642 0.171875 ]
[0.26811594 0.39461883 0.25471698 0.34375 ]]
广播机制对数据归一化
属性缩放到一个指定的最大和最小值(通常是1-0)之间,常用的最小最大规范化方法:
\begin{equation}
(x-min(x))/(max(x)-min(x))
\end{equation}
1
2
3
4
5
6
7
8
9
10
11
12
test = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(test)
>>>
[[1 2 3]
[4 5 6]
[7 8 9]]
test_nor = (test - test.min(axis=0))/ (test.max(axis=0) - test.min(axis=0))
print(test_nor)
>>>
[[0. 0. 0. ]
[0.5 0.5 0.5]
[1. 1. 1. ]]
1 | test = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) |
numpy数组复制并填充
实现功能:
将一个$n\times n$的矩阵复制3次,使维度变为$n \times n \times 3$。推广:将$x$个$n\times n$的矩阵复制3次,即维度为$x \times n \times n$的矩阵变为$x \times n \times n \times 3$的矩阵。
背景:将单通道的gray图像填充为RGB图像,R,G,B的取值为原始的gray颜色值,共对$x$个图像进行这样的处理。
1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
def gray2rgb(array):
number = array.shape[0]
height = array.shape[1]
width = array.shape[2]
array = np.repeat(array, 3)
array = array.reshape(number, height, width, 3)
return array
x_train = gray2rgb(x_train)
1 | import numpy as np |
numpy实现存取csv文件
读入:
1 | array = numpy.loadtxt(open("1.csv","rb"),delimiter=",",skiprows=0) |
写出:
1 | numpy.savetxt('2.csv', array, delimiter = ',') |
多次写入csv文件不产生空行
重点是加入newline=''
1 | with open("filename.csv", "a+", newline='') as csvfile: |