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)
