python基础学习笔记(二)pandas

pandas 是一个强大的python数据分析工具包,基于numpy构建 ,数据结构Dataframe(二维),Series(一维)

安装 pip install pandas 

引用 import pandas as pd 

Series比较像一个列表或者字典

sr = pd.Series([1,3,5,7,9],index=list('abcde')) #通过指定索引也可以找到

获取索引和值的数组

sr.index

sr.values

通过key和value创建

pd.Series({'alpha':3,'beta':2})

Series特性

从ndarray创建:Series(arr)

从字典创建:Series(dis)

数学预算 sr*2 ,  sr1 + sr2 , 

通过索引获取sr[0],sr[[1,2,4]]通过自定义索引获取sr['a'],sr[['a','b','c']]

切片sr[0:2],sr['a':'c'],通过键key进行切片

过滤sr[ar>5]

in运算 'a' in sr 返回布尔型值

for运算 for x in sr.index:     或  for x in sr:

数学函数 np.abs(sr),mean(),sum(),cumsum()

其他函数get('a',default=0)

Series整数索引特性 

sr = pd.Series([1,2,3,4,5,6,7,8])
sr2 = sr[3:].copy()
sr2[3] # 按照键key来进行数据获取,不是按照数组下标

sr2.loc[3] # 按照键key来进行数据获取
sr2.iloc[3] # 按照键数组下标来获取
sr1 = pd.Series([12,23,34],index=['c','a','d']);

sr2 = pd.Series([1,2,3],index=['d','c','a']);

sr1 + sr2 # 按照key进行相加

sr3 = pd.Series([1,2,3,4],index=['b','d','c','a']);

sr1 + sr3 # key无法匹配的情况返回NaN

# 使用函数add,sub,div,mul等可以给NaN设定值
sr1.add(sr3,fill_value=0)

#不想要NaN行数据
srx = sr1 + sr3
srx.dropna()

# 要NaN行数据对数据进行填充
srx = sr1 + sr3
srx.fillna(0.0)
srx.fillna(srx.mean()) # 填充平均数

srx.isnull() # 判断是否是NaN
srx.notnull() # 判断是否不是NaN

pandas:DataFrame

DataFrame是一个表格型的数据结构,含有一组有序数列

DataFrame可以看做是有Series组成的字典,并且共用一个索引

pd.DataFrame({'one':[1,2,3,4],'two':[5,6,7,8]},index=list('abcd'))

pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])})

CSV文件读取和写入

df = df.read_csv('file.csv')

df.loc[:,'start':'end'] #切片返回start到end列

df.index # 获取行 start,end step

df.colums # 获取列 列名数组

df.T # 行列转置

df.values # 去掉key变成二维数组

df.decribe() # 快速统计 返回求和,平均数,标准差,最小,最多,中位数...

df.rename(colums=['oldname':'newname','oln':'nnm']) #修改列名

df.head(10) #查看开始行

df.tail(10) # 查看尾行

DataFrame索引和切片

df['colums']# 取某一列

df[['colums','colums1']]# 取colums和colums1

df['colums']['index'] # 先取列然后取行

df.loc[:,'start':'end'] # 取所有行,然后切片返回start到end列

df.loc[12,'colums'] # 先取行后取列,loc属性key,iloc 属性下标,推荐

df.loc[0:10,'start':'end'] # 取0-10行,然后切片返回start到end列

df.iloc[3] #取第3行

df.iloc[3:5,1:3] #取第3-5行,然后1-3列

df.iloc[3:5] #取第3-5行,等价df.iloc[3:5,:]

df['colums']['0'] = 120 # 修改

df[0,'colums'] = 120 # 修改不产生视图,推荐

df[df['col']>0] #过滤某一列中大于0的数

df[df['col'].isin([1,3,5])] #过滤某一列中数必须在1,3,5中

DataFrame数据对齐,行对其,列对齐,不存在NaN

df.fillna(10) # 填充

df.dropna() #只要有NaN就删除

df.dropna(how='all') #全部是NaN就删除

df.dropna(axis=1)  #axis=0行,axis=1列,列全是NaN删除
df.dropna(axis=1,how='all')  #列全是NaN才删除

DataFrame函数

df.mean() #按列求平均数

df.mean(axis=1) #按行求平均数

df.sum() # 求和

df.sort_values('col',ascending=False) #按列排序

df.T.sort_values('col',axis=1,ascending=False) #按行排序

df.sort_index(ascending=False) #按索引降序

Numpy的其他函数也试用与pandas

apply(func,axis=0) 将自定义函数应用在各行或者各列上,func可返回标量或者Series

df.apply(lambda x:(x['height'] + x['low'])/2,axis=1) # 求每一行的最高值和最低值的平均

df.apply(lambda x:pd.Series([(x['height'] + x['low'])/2,(x['open'] + x['close'])/2],index=['hl_mean','oc_mean']),axis=1) # 求每一行的最高值和最低值的平均,和每一行开盘和收盘平局值

applymap(func) 将函数应用在DataFrame各个元素上

df.applymap(lambda x:x+1) #所有元素加1等同于df+1

map(func) 将函数应用在Series各个元素上

pandas数据分组

df = pd.DataFrame({'data1':np.random.uniform(10,20,5),'data2':np.random.uniform(-10,10,5),'key1':list('abbab'),'key2':list('gfggf')},index=list('ABCD'))

df.groupby('key1').mean() # 分组计算

df.groupby(['key1','key2']).mean() # 多列分组计算

df.groupby(lambda x:'plus' if df.loc[x,'data1']>0 else 'minus').mean()# 自定义分组计算,按数据正负进行分组

df.groupby('key1').groups #获取分组信息

df.groupby('key1').get_group('a') #获取其中一个分组信息

for name, group in df.groupby('key1'):  #循环一个分组

pandas数据聚合

df.groupby('key1').max() # 分组计算

df.groupby('key1').agg(lambda x:x.max()-x:min) # 自定义分组计算,求分组后最大值减去最小值

df.groupby('key1').agg(['data1':'min','data2':'max']) # 自定义分组计算data1求最小值,data2求最大值

pandas数据合并

猜你喜欢

转载自blog.csdn.net/ieflex/article/details/84763337