2019-03-01 | Reinforcement Learning | UNLOCK

Numpy和pandas学习笔记

numpy笔记

基本命令

ndim :维度

shape: 行数和列数

size: 元素个数

array :创建数组

dtype :指定数据类型

empty :创建数据接近0

linspace :创建线段

np.maxnp.min 时可以加个参数axis,0表示找出每列的最值,1表示找出每行的最值。

索引

1
2
3
4
5
6
7
8
9
import numpy as np
A = np.arange(2,14).reshape((3,4))

# array([[ 2, 3, 4, 5]
# [ 6, 7, 8, 9]
# [10,11,12,13]])

print(np.argmin(A)) # 0
print(np.argmax(A)) # 11

元素打印

给定一个矩阵A[3,4],print(A[1])等价于打印第二行,所以numpy里面逐行打印的代码为

1
2
3
4
5
6
7
for row in A:
print(row)
"""
[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]
"""

将矩阵内元素依次打印,flatten 函数将多维的矩阵展开成1行的数列,flat 为一个迭代器,本身具有object 属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
A = np.arange(3,15).reshape((3,4))

print(A.flatten())
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

for item in A.flat:
print(item)

# 3
# 4
……
# 14

矩阵的合并

np.vstack() —-上下合并

np.hstack()—-左右合并

np.newaxis()—-将数组转化为矩阵形式

np.concatenate()—-合并操作多个矩阵,其中也可以选择参数axis,0或1

矩阵的分割

np.split()—-等量分割

np.array_split()—-不等量分割

np.vsplit() np.hsplit()

1
2
3
4
5
6
7
8
9
10
11
12
13
print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))

# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]


print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
"""

矩阵copy

两个复制的区别”=” 和 “copy()”

= 复制之后有关联

copy() 复制之后没有关联

pandas笔记

两个主要数据结构 Series和DataFrame

Series

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
import numpy as np
s = pd.Series([1,3,6,np.nan,44,1])

print(s)
"""
0 1.0
1 3.0
2 6.0
3 NaN
4 44.0
5 1.0
dtype: float64
"""

DataFrame

1
2
3
4
5
6
7
8
9
10
11
12
13
dates = pd.date_range('20160101',periods=6)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])

print(df)
"""
a b c d
2016-01-01 -0.253065 -2.071051 -0.640515 0.613663
2016-01-02 -1.147178 1.532470 0.989255 -0.499761
2016-01-03 1.221656 -2.390171 1.862914 0.778070
2016-01-04 1.473877 -0.046419 0.610046 0.204672
2016-01-05 -1.584752 -0.700592 1.487264 -1.778293
2016-01-06 0.633675 -1.414157 -0.277066 -0.442545
"""

pandas选择数据

根据标签 loc,根据序列 iloc ,混合两种ix

pandas处理丢失数据

pd.dropna()

1
2
3
4
5
6
7
8
9
10
11
df.dropna(
axis=0, # 0: 对行进行操作; 1: 对列进行操作
how='any' # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop
)
"""
A B C D
2013-01-03 8 9.0 10.0 11
2013-01-04 12 13.0 14.0 15
2013-01-05 16 17.0 18.0 19
2013-01-06 20 21.0 22.0 23
"""

pd.fillna()

如果是将 NaN 的值用其他值代替, 比如代替成 0:

1
df.fillna(value=0)

pd.isnull()

判断是否有缺失数据 NaN, 为 True 表示缺失数据:

1
2
3
4
5
6
7
8
9
10
df.isnull() 
"""
A B C D
2013-01-01 False True False False
2013-01-02 False False True False
2013-01-03 False False False False
2013-01-04 False False False False
2013-01-05 False False False False
2013-01-06 False False False False
"""

检测在数据中是否存在 NaN, 如果存在就返回 True:

1
2
np.any(df.isnull()) == True  
# True

pandas导入导出数据

读取csv

1
2
3
4
5
6
7
import pandas as pd #加载模块

#读取csv
data = pd.read_csv('student.csv')

#打印出data
print(data)

将资料存取成pickle

1
data.to_pickle('student.pickle')

pandas合并concat

axis合并方向 注意跟前面numpy不相同

评论加载中