一、Series
类似numpy中的一维数组,但series更灵活,可以自定义索引。
-
创建一维数组:①直接创建:s=Series(data=[1,2,3,4],index=list(‘abcd’))
②通过array创建: s = np.array([1,2,3,4])
pd.Series(s)
③通过list创建: s= [1,2,3,4]
pd.Series(s)
④通过字典创建: dict={‘小明’:1,‘小红’:2,‘小亮’:3,‘小张’:4}
s=Series(dict)
字典的key变为数组的索引,字典的value变为数组的value -
获取数组中的数据:s.values
-
获取数组中的索引:s.index
-
获取数据中的键值对:list(s.iteritems())
-
获取数组中的某个值:①按索引获取:s[ ‘小明’ : ’小亮’ ]
②按位置获取:s[ 0:2 ] -
修改索引:s.index=list[ ‘abcd’ ]在原数组修改
m=s.reindex([‘a’,‘b’,‘c’])返回一个新的数组 -
删除数组中的元素:s.drop(‘小明’)
-
数组的运算:根据索引对相应数据计算,如果两个数组中找不到相同的index,对应位置返回nan
-
布尔数组过滤:s[s>3]首先返回s>3的布尔值,然后进行判断输出
-
数组与数计算:给每一个元素都进行相应计算(与numpy同)
二、 Dataframe
是一个二维表,可存储不同类型的数据
- 创建二维数组:①直接创建:pd.DataFrame([[‘1’,‘2’,‘3’],[‘4’,‘5’,‘6’]]])
②通过二维数组创建:m=np.random.randint(0,10,(3,3))
m=DataFrame(m,index=[1,2,3],columns=[‘a’,‘b’,‘c’])
③通过字典创建: dict={‘name’:[‘t’,‘r’,‘y’],‘score’:[‘1’,‘2’,‘3’]})
m=pd.Dataframe(dict)或m=pd.Dataframe.from_dict(dict)
字典的key转换为列索引;字典中每个key对应值个数不同时,转化后,没有值的位置返回nan - 获取行、列数:m.shape()
- 获取行索引:m.index.tolist()
- 获取列索引:m.columns.tolist()
- 获取数据类型:m.dtypes
- 返回数组信息:m.info()
- 获取前几行:m.head()
- 获取后几行:m.tail()
- 获取某一列:m[‘索引名’]返回的是一个Series
- 获取多列:m[ [ ‘索引名1’, ‘索引名2’ ] ] 返回的是一个DataFrame
- 获取多行:m[0:2]使用切片
- 获取多行多列:m[0:2] [ [ ‘索引名1’, ‘索引名2’ ] ]
m.iloc[1:3,2:5]通过位置信息提取
m.loc[[1,2],[‘b’,’c’]]通过索引信息提取
三、数据处理
1.缺失值处理:
①删除缺失值
Series:
删除nan:s.dropna( )
返回不为空的值:s.notnull( )返回值为布尔值
过滤空值:s [ s.notnull( ) ]
Dataframe :
m.dropna(axis=1,how=‘any’) 默认只要包含nan则删除整行,axis表示按列/列判断,how表示是全部为nan时删除/只要包含一个nan即删除
m.dropna(thresh=1) 只要有1个元素不是nan就保留
②填充空缺值:
m.fillna(m.mean(),inplace=True)inplace表示是否在原数据上修改,或返回一个新的数组
填充方式:
- 0固定值填充
- m.mean()均值填充
- method=‘ffill’/'bfill’用其前/后面的值填充(用limit限制填充数量,axis控制填充方向)
2.去除重复:
判断是否重复:m.drop_duplicated( )返回布尔值
去除重复值:m.drop_duplicates( )
指定列去除重复值:m.drop_duplicates([‘索引名’] ,inplace=True,keep=last)keep代表重复值中保留哪一个
3.合并:
m.join(n,how=‘left’)针对行操作, how表示连接方式:left、right、outer。选择left时,以m为主,选择outer时,所有元素均含有。
pd.merge(m,n,how=‘left’)针对列操作,类似数据库操作