python中pandas库学习笔记
2015-10-13 21:19
836 查看
现在回想学pandas很意外,记得五月份的时候刚刚跑到现在的公司实习,那个时候公司没发电脑,当时天天去那就看书(自己的电脑被朋友拿走了),就这样看了半个月的pandas,后来也就慢慢用上了,下面是pandas个人学习的一些简单笔记:
#python中的pandas库主要有DataFrame和Series类(面向对象的的语言更愿意叫类) DataFrame也就是 #数据框(主要是借鉴R里面的data.frame),Series也就是序列 ,pandas底层是c写的 性能很棒,有大神 #做过测试 处理亿级别的数据没问题,起性能可以跟同等配置的sas媲美 #DataFrame索引 df.loc是标签选取操作,df.iloc是位置切片操作 print(df[['row_names','Rape']]) df['行标签'] df.loc[行标签,列标签] print(df.loc[0:2,['Rape','Murder']]) df.iloc[行位置,列位置] df.iloc[1,1]#选取第二行,第二列的值,返回的为单个值 df.iloc[0,2],:]#选取第一行及第三行的数据 df.iloc[0:2,:]#选取第一行到第三行(不包含)的数据 df.iloc[:,1]#选取所有记录的第一列的值,返回的为一个Series df.iloc[1,:]#选取第一行数据,返回的为一个Series print(df.ix[1,1]) # 更广义的切片方式是使用.ix,它自动根据你给到的索引类型判断是使用位置还是标签进行切片 print(df.ix[0:2]) #DataFrame根据条件选取子集 类似于sas里面if、where ,R里面的subset之类的函数 df[df.Murder>13] df[(df.Murder>10)&(df.Rape>30)] df[df.sex==u'男'] #重命名 相当于sas里面的rename R软件中reshape包的中的rename df.rename(columns={'A':'A_rename'}) df.rename(index={1:'other'}) #删除列 相当于sas中的drop R软件中的test['col']<-null df.drop(['a','b'],axis=1) or del df[['a','b']] #排序 相当于sas里面的sort R软件里面的df[order(x),] df.sort(columns='C') #行排序 y轴上 df.sort(axis=1) #各个列之间位置排序 x轴上 #数据描述 相当于sas中proc menas R软件里面的summary df.describe() #生成新的一列 跟R里面有点类似 df['new_columns']=df['columns'] df.insert(1,'new_columns',df['B']) #效率最高 df.join(Series(df['columns'],name='new_columns')) #列上面的追加 相当于sas中的append R里面cbind() df.append(df1,ignore_index=True) pd.concat([df,df1],ignore_index=True) #最经典的join 跟sas和R里面的merge类似 跟sql里面的各种join对照 merge() #删除重行 跟sas里面nodukey R里面的which(!duplicated(df[])类似 df.drop_duplicated() #获取最大值 最小值的位置 有点类似矩阵里面的方法 df.idxmin(axis=0 ) df.idxmax(axis=1) 0和1有什么不同 自己摸索去 #读取外部数据跟sas的proc import R里面的read.csv等类似 read_excel() read_csv() read_hdf5() 等 与之相反的是df.to_excel() df.to_ecv() #缺失值处理 个人觉得pandas中缺失值处理比sas和R方便多了 df.fillna(9999) #用9999填充 #链接数据库 不多说 pandas里面主要用 MySQLdb import MySQLdb conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="mysql",use_unicode=True,charset="utf8") read_sql() #很经典 #写数据进数据库 df.to_sql('hbase_visit',con, flavor="mysql", if_exists='replace', index=False) #groupby 跟sas里面的中的by R软件中dplyr包中的group_by sql里面的group by功能是一样的 这里不多说 #求哑变量 dumiper=pd.get_dummies(df['key']) df['key'].join(dumpier) #透视表 和交叉表 跟sas里面的proc freq步类似 R里面的aggrate和cast函数类似 pd.pivot_table() pd.crosstab() #聚合函数经常跟group by一起组合用 df.groupby('sex').agg({'height':['mean','sum'],'weight':['count','min']}) #数据查询过滤 test.query("0.2 将STK_ID中的值过滤出来 stk_list = ['600809','600141','600329']中的全部记录过滤出来,命令是:rpt[rpt['STK_ID'].isin(stk_list)]. 将dataframe中,某列进行清洗的命令 删除换行符:misc['product_desc'] = misc['product_desc'].str.replace('\n', '') 删除字符串前后空格:df["Make"] = df["Make"].map(str.strip) 如果用模糊匹配的话,命令是: rpt[rpt['STK_ID'].str.contains(r'^600[0-9]{3}$')] 对dataframe中元素,进行类型转换 df['2nd'] = df['2nd'].str.replace(',','').astype(int) df['CTR'] = df['CTR'].str.replace('%','').astype(np.float64) #时间变换 主要依赖于datemie 和time两个包 http://www.2cto.com/kf/201401/276088.html #其他的一些技巧 df2[df2['A'].map(lambda x:x.startswith('61'))] #筛选出以61开头的数据 df2["Author"].str.replace("<.+>", "").head() #replace("<.+>", "")表示将字符串中以”<”开头;以”>”结束的任意子串替换为空字符串 commits = df2["Name"].head(15) print commits.unique(), len(commits.unique()) #获的NAME的不同个数,类似于sql里面count(distinct name) #pandas中最核心 最经典的函数apply map applymap #这三个函数是pandas里面数据变换的核心 避免了for循环,跟R里面的apply函数类似 #主要用法不清楚可以问我 pd.concat([df1,df2],axis=1) 横向合并 ,没有axis=1 则纵向合并 上面有不懂得、或者我写错的、或者侵权的、或愿意交流的请加(714947298)
相关文章推荐
- python 中 exec、 eval、 execfile 和 compile 用法
- python中的pandas包的数据清洗能力
- python中knn算法实现
- 搜索引擎关键词抓取 以百度为例 python
- python中结巴分词快速入门
- Windows Opencv-3.0 + Python-2.7.10 配置(numpy-1.8.1-64位)
- python 中ggplot画图
- python调用R
- java中调用python的方法
- Python3笔记——IDE的选择
- python if __name__ == '__main__' 详解
- Caffe 多爱Python一丢丢,Cifar-10
- 在Anaconda中安装python包seaborn
- Pythonic到底是什么玩意儿?
- python学习--异常
- python列表和分片
- Ubuntu环境下安装python的flask
- Python3笔记——定义变量
- 解析Python中while true的使用
- wxpython应用多线程CallAfter来实现子页面向主页面传递消息的要求