一、numpy
基于C语言
array:数组
列表和数组类似
a=np.array([1,2,3,4])
1、索引:
a[0]
结果1
2、赋值,也就是修改
a[0]=0
结果:array([0, 2, 3, 4])
3、相加
a+1
结果:array([1, 3, 4, 5])
4、数组与数组相加
a+a
结果:array([0, 4, 6, 8])
5、相乘
a*a
结果:array([ 0, 4, 9, 16])
6、多维数组,支持矩阵运算
np.array([[1,2,3,4],[5,6,7,8]])
结果:array([[1, 2, 3, 4],
[5, 6, 7, 8]])
索引:
b=np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]])
b[0][1]
结果:2
b[0]
结果:array([1, 2, 3, 4])
类型,与列表类型不一样,列表整数型是int
b.dtype
结果:dtype('int32')
二、pandas
基于numpy基础上改造
二维数组在pandas是数据框
数据结构有两个:serise近似数组的一维结构 、 dataframe二维结构
1、Serise:一维结构
列表转成Serise
s=pd.Series([1,2,3,4])
1、索引
s[2]
结果:3
s[[0,2]]
结果:0 1
2 3
dtype: int64
2、赋值
s[0]=10
结果:
0 10
1 2
2 3
3 4
4 12
dtype: int64
3、增加
s[4]=12
结果:
0 10
1 2
2 3
3 4
4 12
dtype: int64
4、字典传入
d={'qinlu':'handsom','lulu':'smart'}
s3=pd.Series(d)
结果:s3
qinlu handsom
lulu smart
dtype: object
5、传入index
s3=pd.Series(d,index=['qinlu','lulu','qinqin'])
结果:
qinlu handsom
lulu smart
qinqin NaN
dtype: object
6、转化类型(字符串的类型是dtype: object)
s.astype('str')
7、增加不同类型数据后,类型会转化成一致
ps:列表的数据类型可不一致
s1=pd.Series([1,2,3,4],index=['a','b','c','d'])
结果:
s1["A"]="A"
结果:
2、dataframe:二维结构
A、手动生成数据框
1、字典转dataframe
d={
'name':['qinlu','lulu','qinqin'],
'sex':['male','male','female'],
'age':[18,20,30]
}
df=pd.DataFrame(d)
df
结果:
2、列表转成dataframe
pd.DataFrame([[1,2,3,4],[4,5,6,7]],index=['a','b'],columns=['a','b','c','d' ])
结果:
3、Serise转dataframe
s=pd.Series([1,2,3,4])
pd.DataFrame(s)
结果
B、函数
1、df.info():数据类型
2、数据框索引
#取一列,结果是一个serise类型
df['age']等价于df.age
取一行##注意会报错,但不影响
df.ix[0]
取某几列
df[["age","name"]]
取某几行
df.ix[0:1] ###右边是闭区间
df[0:1] ###右边是开区间
取某几列某几行
df[["age","name"]][0:2]
结果:
3、赋值(修改)
一列赋值
df.age=23
结果:
一列赋不同的值
df.age=[18,18,30]
结果
4、查找
精确查找,返回为真的值
df[df.age==18]
~取相反的结果
df[~(df.age>18)]
查找多个条件
df[(df.age==18)&(df.name =='qinlu')]
等价于
df.query("(age ==18)&(name =='qinlu')")
这里的query()函数
5、ix,iloc,loc函数
建议使用iloc
##iloc表示查找某个行,不管有没有标签都可以查找
df.iloc[1]
等价于
df[1:2]
##查找某一区域的数据
df.iloc[1:2,1]
loc用途就是通过标签来查找
df.loc['a']
等价于
df.iloc[0]
###查找某一区域的数据
df.loc['a',['age','name']]
####赋值,使用loc
如下图
##df.ix是混合型的
课后思考:为啥list('ab')报错