numpy补充和pandas入门
numpy补充
矩阵的索引和切片
索引和切片的基本操作和python一样,在此介绍二维数组的索引和切片操作。
索引行和列
生成4x4的矩阵,分别索引需要的行和列:
import numpy as np
A= np.arange(16).reshape(4,4)
print(A)
print(A[1:3]) #索引第2行和第3行
print(A[:,2:4]) #索引第3列和第4列
print(A[1:3,2:4])#索引第2行和第3行中的第3列和第4列
结果如下:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 4 5 6 7]
[ 8 9 10 11]]
[[ 2 3]
[ 6 7]
[10 11]
[14 15]]
[[ 6 7]
[10 11]]
按特定条件索引
如:
import numpy as np
A= np.arange(16).reshape(4,4)
print(A)
print(A[A>10]) #输出A中大于10的元素组成的数组
print(A[A%2==0]) #输出A中偶数元素组成的数组
结果如下:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[11 12 13 14 15]
[ 0 2 4 6 8 10 12 14]
pandas入门
pandas的关键数据结构
一维数据结构Series
import pandas as pd
import numpy as np
s=pd.Series([1,3,5,np.NaN,8,4]) #NaN表示Not a Number
print(s)
输出结果如下:
0 1.0
1 3.0
2 5.0
3 NaN
4 8.0
5 4.0
dtype: float64
第一列为索引(自动创建),第二列为值。
二维数据结构DataFrame
- 创建日期序列
import pandas as pd
import numpy as np
dates=pd.date_range('20160301',periods=6)
print(dates)
输出结果如下:
DatetimeIndex(['2016-03-01', '2016-03-02', '2016-03-03', '2016-03-04',
'2016-03-05', '2016-03-06'],
dtype='datetime64[ns]', freq='D')
- 用数据结构DataFrame创建二维数组:
import pandas as pd
import numpy as np
dates=pd.date_range('20160301',periods=6)
data=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
#使用np.random.randn()创建6x4的随机数组,使用dates作为行索引,列索引用ABCD表示。
print(data)
输出结果如下:
A B C D
2016-03-01 -1.025216 -1.750513 0.717700 1.249785
2016-03-02 -1.159727 1.247696 0.681604 -0.795137
2016-03-03 -0.904264 1.103957 0.639108 -0.573438
2016-03-04 0.287851 1.855954 -1.431715 0.890373
2016-03-05 0.034006 -1.472277 0.609982 -0.546555
2016-03-06 0.301257 -1.247960 2.360873 -0.425789
字典(另一个创建二维数组的方法)
使用字典创建一个二维数组:
import pandas as pd
import numpy as np
d={
'A':1,"B":pd.Timestamp("20130301"),'C':range(4),'D':np.arange(4)}
#ABCD四个key分别赋值数值1、一个时间戳、range()函数的值、np.arange()函数的值。
df=pd.DataFrame(d)
print(df)
输出结果如下:
A B C D
0 1 2013-03-01 0 0
1 1 2013-03-01 1 1
2 1 2013-03-01 2 2
3 1 2013-03-01 3 3
查看数据
head查看前(五)行、tail查看后(五)行
head()、tail()默认返回5行数据
import pandas as pd
import numpy as np
dates=pd.date_range('20160301',periods=6)
data=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
#使用np.random.randn()创建6x4的随机数组,使用dates作为行索引,列索引用ABCD表示。
print(data.head())
print(data.tail())
print(data.head(2))
print(data.tail(3))
输出结果如下:
A B C D
2016-03-01 0.687377 0.291196 0.788835 0.144668
2016-03-02 0.133120 -1.066542 -0.655071 -0.278354
2016-03-03 0.571230 1.059514 -1.572226 0.998279
2016-03-04 -0.707941 0.490541 -0.508189 1.332583
2016-03-05 0.782082 -0.309733 0.385113 -2.001689
A B C D
2016-03-02 0.133120 -1.066542 -0.655071 -0.278354
2016-03-03 0.571230 1.059514 -1.572226 0.998279
2016-03-04 -0.707941 0.490541 -0.508189 1.332583
2016-03-05 0.782082 -0.309733 0.385113 -2.001689
2016-03-06 0.155096 -0.276119 1.035860 -0.385331
A B C D
2016-03-01 0.687377 0.291196 0.788835 0.144668
2016-03-02 0.133120 -1.066542 -0.655071 -0.278354
A B C D
2016-03-04 -0.707941 0.490541 -0.508189 1.332583
2016-03-05 0.782082 -0.309733 0.385113 -2.001689
2016-03-06 0.155096 -0.276119 1.035860 -0.385331
index、columns、values
index返回行标签、columns返回列标签、values以二维数组的形式返回该二维数组的值。
import pandas as pd
import numpy as np
dates=pd.date_range('20160301',periods=6)
data=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
#使用np.random.randn()创建6x4的随机数组,使用dates作为行索引,列索引用ABCD表示。
print(data)
print(data.index)
print(data.columns)
print(data.values)
输出结果如下:
A B C D
2016-03-01 -0.627376 -0.631146 -0.768253 -0.365725
2016-03-02 0.274266 -2.671629 -0.971605 -1.304933
2016-03-03 -0.039024 -1.267995 1.343958 -1.553249
2016-03-04 -0.564481 -0.157503 -0.716591 -0.290638
2016-03-05 0.768433 -0.397582 0.678337 -0.707139
2016-03-06 -0.162657 -1.191969 0.439424 -3.304446
DatetimeIndex(['2016-03-01', '2016-03-02', '2016-03-03', '2016-03-04',
'2016-03-05', '2016-03-06'],
dtype='datetime64[ns]', freq='D')
Index(['A', 'B', 'C', 'D'], dtype=</