Series
1. 定义Series:
- 可以传入一个列表 [1,2,3,4]
- 可以传入一个字典 {'a':1,'b':2,'c':3},如果传入字典则key为索引列
obj1=pd.Series([9,2,4,3],index=['a','b','c','d']) #列表创建需要指定索引 obj1
a 9 b 2 c 4 d 3 dtype: int64
2. 方法:
- isnull(): 判断是否为空. pd.isnull(series)
- notnull(): 判断是否不为空 pd.notnull(series)
sdata={'hanson':18,'Carter':19,'Tim':22,'Michael':10} obj2 = pd.Series(sdata) obj2
hanson 18 Carter 19 Tim 22 Michael 10 dtype: int64
pd.isnull(obj2)
hanson False Carter False Tim False Michael False dtype: bool
DataFrame
1. 定义dataframe:
- 最常用的是传入一个由多个等长列表或者Numpy数组组成的字典
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002, 2003], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]} frame = pd.DataFrame(data) In [45]: frame Out[45]: pop state year 0 1.5 Ohio 2000 1 1.7 Ohio 2001 2 3.6 Ohio 2002 3 2.4 Nevada 2001 4 2.9 Nevada 2002 5 3.2 Nevada 2003
- 定义DataFrame最常用的属性有index, columns,分别制定DataFrame的行和列名。
sdata = {'name':['hanson','carter','tim','jason'], 'age':[18,18,19,20], 'sex':['male','male','female','female']} df2=pd.DataFrame(sdata,columns=['name','hige','sex','age'],index=['zero','one','two','three']) df2
2. 常用方法:
- reindex : 重新定义索引列,自动和原来的索引列做匹配,无法匹配上的value值为NaN。默认是修改索引列,如果增加columns=参数则可以修改列名称。df.reindex(['a','b','c']) 或者 df.reindex(columns=['col1','col2','col3'])
- drop: 删除行或者列。axis=0 为删除指定行,axis=1为删除指定列。df.drop(['a','b'],axis==0) 或 df.drop(['col1','col2'],axis=1)
- loc: 根据行名和列名筛选数据。 df.loc[行名称,列名称]
one two three four Ohio 0 1 2 3 Colorado 4 5 6 7 Utah 8 9 10 11 New York 12 13 14 15 In [137]: data.loc['Colorado', ['two', 'three']] Out[137]: two 5 three 6 Name: Colorado, dtype: int64
- iloc: 根据行号和列号筛选数据。 df.iloc[行号,列号]
In [140]: data.iloc[[1, 2], [3, 0, 1]] Out[140]: four one two Colorado 7 0 5 Utah 11 8 9
- 加减乘除 + - * / : 两个DataFrame做加减乘除操作的时候,有交集的部分会做运算,没有交集的部分会自动取并集并自动写NaN作为值。
- add/radd, sub/rsub, mul/rmul, div/rdiv, floordiv/rfloordiv, pow/rpow: 两个DataFrame做加减乘除操作的时候,有交集的部分会做运算,没有交集的部分会自动取并集并填写原来各自DataFrame的值。
- apply : DataFrame可以使用apply方法调用其他方法
In [190]: frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'), .....: index=['Utah', 'Ohio', 'Texas', 'Oregon']) In [192]: np.abs(frame) Out[192]: b d e Utah 0.204708 0.478943 0.519439 Ohio 0.555730 1.965781 1.393406 Texas 0.092908 0.281746 0.769023 Oregon 1.246435 1.007189 1.296221 In [193]: f = lambda x: x.max() - x.min() In [194]: frame.apply(f) Out[194]: b 1.802165 d 1.684034 e 2.689627 dtype: float64 In [195]: frame.apply(f, axis='columns') Out[195]: Utah 0.998382 Ohio 2.521511 Texas 0.676115 Oregon 2.542656 dtype: float64
- sort_index() : 按照索引或者表头排序. df.sort_index(axis=0/1,ascending=False) ,默认为升序,参数ascending=False为降序
- sort_values() : 按照指定的一个或者多个列排序. df.sort_values(by=列名)
In [211]: frame = pd.DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]}) In [212]: frame Out[212]: a b 0 0 4 1 1 7 2 0 -3 3 1 2 In [213]: frame.sort_values(by='b') Out[213]: a b 2 0 -3 3 1 2 0 0 4 1 1 7 In [214]: frame.sort_values(by=['a', 'b']) Out[214]: a b 2 0 -3 0 0 4 3 1 2 1 1 7
- is_unique : 可以用来判断索引是否重复 df.index.is_unique --- True/False
- 其他计算方法:
- unique() : 得到Series中的唯一值数组。
In [251]: obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c']) In [252]: uniques = obj.unique() In [253]: uniques Out[253]: array(['c', 'a', 'd', 'b'], dtype=object)