numpy:基于矩阵的数学计算库。
pandas:基于表格的统计分析库。“~”:反转,a是Ture,则~(a)是False。
numpy
In [1]: import numpy as np
In [2]: np.array([1,2,3])
Out[2]: array([1, 2, 3])
In [3]: type(np.array([1,2,3]))
...: #数据类型为n维数组
Out[3]: numpy.ndarray
#数组和列表类似,索引也类似
In [4]: a = np.array([1,2,3])
In [5]: a+1
Out[5]: array([2, 3, 4])
#多维数组自动换行,成为矩阵
In [6]: np.array([[1,2,3],[2,3,4]])
Out[6]:
array([[1, 2, 3],
[2, 3, 4]])
pandas
pandas两大数据结构:Series 和 DataFrame。
【pandas中很多默认操作都是针对列的(df.age=df.age+1那一列所有年龄+1)】【不建议在pandas里增删数据】
1. series
输出的第一列是索引,并且可以替换。
In [1]: import pandas as pd
In [2]: s=pd.Series([1,2,3,4])
...: s
Out[2]:
0 1
1 2
2 3
3 4
dtype: int64
In [3]: s=pd.Series([1,2,3,4],index=['a', 'b', 'c', 'd'])
...: s
Out[3]:
a 1
b 2
c 3
d 4
dtype: int64
#更改数据类型
In [4]: s.astype('str')
Out[4]:
a 1
b 2
c 3
d 4
dtype: object
数据的更改和查找。
In [5]: s['b'] = 8
...: s
Out[5]:
a 1
b 8
c 3
d 4
dtype: int64
In [6]: s[['a','d']]
Out[6]:
a 1
d 4
dtype: int64
字典也可以应用到Series数据结构中
In [1]: import pandas as pd
In [2]: d={'tata':'good','haha':'bad'}
In [3]: pd.Series(d)
Out[3]:
haha bad
tata good
dtype: object
#索引不到的就是空值
In [4]: pd.Series(d,index=['tata','haha','uu'])
Out[4]:
tata good
haha bad
uu NaN
dtype: object
2. DataFrame
In [1]: import pandas as pd
In [2]: pd.DataFrame([[5,4,3,2],[6,6,6,6]])
Out[2]:
0 1 2 3
0 5 4 3 2
1 6 6 6 6
In [3]: pd.DataFrame([[5,4,3,2],[6,6,6,6]],columns=['f1','f2','f3','f4'])
Out[3]:
f1 f2 f3 f4
0 5 4 3 2
1 6 6 6 6
In [4]: d={
...: 'name':['huahua','xiaolu','dazhun'],
...: 'sex':['nv','nan','nv'],
...: 'age':[18,18,21]}
In [5]: df=pd.DataFrame(d)
...: df
Out[5]:
age name sex
0 18 huahua nv
1 18 xiaolu nan
2 21 dazhun nv
DataFrame中的数据查找(query,loc,iloc)
#此时DataFrame相当于Series
In [6]: df['sex']
Out[6]:
0 nv
1 nan
2 nv
Name: sex, dtype: object
In [7]: df.sex
Out[7]:
0 nv
1 nan
2 nv
Name: sex, dtype: object
In [8]: df.age==18
Out[8]:
0 True
1 True
2 False
Name: age, dtype: bool
#多条件查找
In [9]: (df.age==18)&(df.name=='xiaolu')
Out[9]:
0 False
1 True
2 False
dtype: bool
In [10]: df[(df.age==18)&(df.name=='xiaolu')]
Out[10]:
age name sex
1 18 xiaolu nan
note 1 :‘&’表示两个条件都满足;‘|’表示满足一个条件即可。
query
df.query(expr, inplace=False, **kwargs)
#等价于df[(df.age==18)|(df.name=='xiaolu')]
In [11]: df.query("age==18 & name=='xiaolu'")
Out[11]:
age name sex
1 18 xiaolu nan
ix、loc、iloc
#有警告
In [12]: df.ix[0]
Out[12]:
age 18
name huahua
sex nv
Name: 0, dtype: object
#查找出0到1的数据
In [13]: df.ix[0:1]
Out[13]:
age name sex
0 18 huahua nv
1 18 xiaolu nan
#查找索引是'1'的行
In [14]: df.loc[1]
Out[14]:
age 18
name xiaolu
sex nan
Name: 1, dtype: object
#查找第一行
In [15]: df.iloc[0]
Out[15]:
age 18
name huahua
sex nv
Name: 0, dtype: object
#查找第二行第三个
In [16]: df.iloc[1,2]
Out[16]: 'nan'
In [17]: df.iloc[1:2,2]
Out[17]:
1 nan
Name: sex, dtype: object
In [18]: df.loc[2,'age']
Out[18]: 21
In [19]: df.loc[2,['age','sex']]
Out[19]:
age 21
sex nv
Name: 2, dtype: object
note 2 :
- df.iloc 对行(不管标签是数字还是字符串,就看行0,1,...)的索引(第2行)等价于df.[0:1];
- df.loc 是对行的标签,可以是0,1,2(‘a’,'b','c');
- df.ix 相当于混合df.iloc和df.loc。