1. import matplotlib
  2. from pandas import DataFrame
  3. import numpy as np
  4. import pandas as pd
  5. import MySQLdb
  6. import matplotlib.pyplot as plt
  7.  
  8. #df =Padaas dataframe 对象(二维标记数组)
  9. #s =Pandas series对象(一维标记数组)
  10. db = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="", db='spj',charset="utf8")#连接数据库
  11. filename = 'count_day.csv'#文件路径名
  12. query = 'select * from j'#sql查询语句
  13. '''
  14. #导入数据
  15.  
  16. pd.read_excel(filename)#从excel文件导入数据
  17. pd.read_table(filename)#和csv一样,必须界定分隔符
  18. pd.read_json(json-string)#从json格式的字符串导入数据
  19. pd.read_html(url)#解析url,html文件,导入其中的tables表格
  20. pd.read_clipboard()#从粘贴板获取内容,传给read_tables()
  21.  
  22. #从sql数据库导入数据
  23. df=pd.read_sql(query,db)
  24.  
  25. #从csv导入数据
  26. #index_col为指定数据中哪一列作为Dataframe的行索引
  27. #分隔符默认为,分隔
  28. df = pd.read_csv(filename,sep=',',header=None,index_col=0)
  29.  
  30. #导出数据
  31. df.to_csv('ans.csv',index=False,sep=',')#导出数据到csv
  32. df.to_excel(filename)#导出数据到excel
  33. df.to_sql(table_name,db)#导出数据到sql
  34. df.to_json(filename)#以json格式导出数据到文本文件
  35.  
  36. #自己构造dataframe数据
  37. df = pd.DataFrame([[1,2,3],[4,5,6]],columns=['f1','f2','f3'])#columns是列索引
  38. df = pd.DataFrame({'user-id':['1','2','3'],'item_id':['商品1','商品2','商品3']})#按列构造
  39. df = pd.DataFrame([{'user-id':'用户1','item-id':'商品1'},{'user-id':'用户2'}])#按行构造
  40.  
  41. #查看数据
  42. show = df.head(1)#head(n),查看前n行
  43. show = df.tail(1)#查看最后n列
  44. show = df.shape#查看行数和列数
  45. show = df.info()#查看索引,数据类型和内存信息
  46. show = df.describe()#查看数值型列的汇总信息
  47. show = df['item-id'].value_counts(dropna=False)#查看Series对象的唯一值和计数
  48. show = df['item-id'].unique()#查看Series不重复的值
  49.  
  50. #数据选取
  51. s = df['user-id']#(name)获取一列的数据,返回值为Series
  52. df = df[['user-id','item-id']]#(list)选取某几列,返回为Dataframe
  53. show = s.iloc[0]#按位置选取数据(Serieas可以省略df['user_id'][0])
  54. show = df.iloc[0,0:2]#(row,col)返回第一行,从0到2列
  55. show = s.loc['item-id']#按索引选取数据
  56. show = df.sample(frac=0.5)#按比例随机采样
  57. show = df.sample(n=len(df))#指定采样个数
  58. '''
  59.  
  60. #自己构造dataframe数据
  61. df = pd.DataFrame([[1,2,3],[4,5,6]],columns=['f1','f2','f3'])#columns是列索引
  62. df = pd.DataFrame([{'user-id':'用户1','item-id':1},{'user-id':'用户2'}])#按行构造
  63. df = pd.DataFrame({'user_id':['行1','行1','行3'],'item_id':['商品1','商品2','商品3'],'test_id':[12,11,4]})#按列构造
  64. '''
  65. #数据整理
  66. show = df.isnull()#查看对象中的空值,返回一个bool类型
  67. show = df.notnull()#查看对象中的非空值,返回一个bool类型
  68. show = df.dropna(axis=0)#删除所有包含空格的行
  69. show = df.dropna(axis=1)#删除所有包含空格的列
  70. show = df.dropna(axis=0,thresh=2)#删除所有小于(thresh)个非空值的行
  71. show = df.fillna('商品id')#对所有空值填充,可指定哪几列(df[].fillna())
  72. show = df.fillna(df.mode().iloc[0])#众值填充
  73. show = df.fillna(df.median())#中位数填充
  74. show = df["item-id"].fillna('填充')#对某一列填充
  75.  
  76. show = df["item-id"].astype(float)#更改某一列的数据类型
  77. show = df["item-id"].replace(1,'one')#用‘one'代替所有等于1的值
  78. show = df.rename(columns=lambda x:x+"1")#批量更改列名
  79. show = df.rename(index=lambda x:x+"1")#批量更改索引
  80. show = df.rename(columns={'item-id':'商品id'})#选择性更改列名
  81. show = df.set_index('item-id',append=False) #将某一列变成索引,append=true添加新索引
  82.  
  83. df1 = df.sample(n=1)
  84. df2 = df.sample(frac=0.5)商品种类
  85. df3 = pd.concat([df1,df2])#合并两个数据集
  86. show = df3.reset_index(drop=False)#重置索引,drop=true舍弃以前的索引
  87.  
  88. #数据处理
  89. show = df[df['test_id']>4]#选择'test_id'列>4的行
  90. show = df.sort_values(by='test_id',ascending=True)#按照列‘test_id’排序,默认升序
  91. show = df.sort_values(by=['test_id','item_id'],ascending=[True,False])#先按列‘test_id’排升序,后按'item_id'排降序
  92. show = df.groupby('user_id')['test_id'].apply(np.mean)#按‘user_id’分组后,对其'test_id'求均值
  93. show = df.pivot_table(index='user_id',values=['item_id','test_id'],aggfunc=min)#按索引分组,值,每组里面的最小值
  94.  
  95. show = df.groupby('user_id',as_index=False)['test_id'].agg({'商品种类':'count','商品总数':'sum'})
  96. #先分组,根据'test_id'字段做统计,as_index默认将依据分组字段作为索引
  97. show = df['test_id'].apply(np.mean)#对df中的每一列应用函数np.mean
  98. show = df.apply(np.max,axis=1)#对df中的每一列应用函数np.mean(必类型统一)
  99.  
  100. for index,row in df.iterrows():
  101. #index索引,row每一行,输出时,选取其中的一个或几个字段输出
  102. print(index,row['user_id'],row['test_id'])
  103.  
  104. for key,df in df.groupby('user_id'):
  105. #key='user_id',df是分组后的数据
  106. print(key,len(df),df)
  107.  
  108. #构造分组特征,对'user_id'分组,对一个S对象,计算等级(rank)
  109. #rank:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.rank.html
  110. show = df.groupby('user_id',as_index=False)['test_id'].rank(ascending=False,method='average')
  111.  
  112. #数据合并
  113. df = df1.append(df2)#将df2中的行添加到df1的尾部
  114. df = pd.concat([df1,df2],axis=1)#按列合并(axis=1),按行合并(axis=0)(都要保证对应的行和列是一样的)
  115. df = pd.merge(df1,df2,on='user_id',how='inner')#对df1,df2的列进行类似SQLjoin操作
  116.  
  117. #集合差集计算
  118. df1 = pd.DataFrame({'user':[1,2,3,4],'id':[101,102,103,104]})
  119. df2 = pd.DataFrame({'user':[1,2]})
  120. df2['flag']=1#设置一个标志列
  121. df = pd.merge(df1,df2,on='user',how='left')#左连接
  122. df = df[df.flag.isnull()].drop('flag',axis=1)#对df1中出现的df2删除行,并且删除'flag'
  123.  
  124. #统计函数
  125. show = df.mean()#返回所有列的均值
  126. show = df.corr()#返回列于列的关系函数
  127. show = df.user_id.corr(df.test_id)#
  128. show = df.count()#返回每一列非空值的个数
  129. show = df.max()#每一列最大值
  130. show = df.min()#每一列最小值
  131. show = df.median()#返回每一列的中位数
  132. show = df.std()#返回每一列的标准差
  133. show = df.dtypes()#查看数据类型
  134. show = df.isnull.sum()#查看每一列的空值个数
  135. '''
  136. #画图函数
  137. zhfont = matplotlib.font_manager.FontProperties(fname=r'C:/Windows/Fonts/FZYTK.TTF') # chinese
  138.  
  139. #直方图
  140. hist = df['user_id'].hist()#查看变量分布
  141. hist.plot()
  142.  
  143. #折线图
  144. s = df['test_id']
  145. s.plot()
  146. df.plot()
  147.  
  148. #柱图
  149. fig, axes = plt.subplots(2, 1)
  150. s = df['test_id']
  151. s.plot(kind='bar', ax=axes[0], color='k', alpha=0.7)
  152. s.plot(kind='barh', ax=axes[1], color='k', alpha=0.7)
  153.  
  154. plt.legend(prop=zhfont)
  155. plt.show()

参考资料:

  1. http://pandas.pydata.org/pandas-docs/stable/api.html#binary-operator-functions
  1. https://blog.csdn.net/hustqb/article/details/54410670

python padas 学习的更多相关文章

  1. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  2. 60分钟Python快速学习(给发哥一个交代)

    60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...

  3. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  4. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  5. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  6. python 线程学习

    彩照 一.学习[1] # -*- coding: utf-8 -*- import time import thread def timer(no, interval): cnt = 0 while ...

  7. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  8. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

  9. Python实战:Python爬虫学习教程,获取电影排行榜

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

随机推荐

  1. OpenCV3如何使用SIFT和SURF Where did SIFT and SURF go in OpenCV 3?

    Installation and Usage If you have previous/other version of OpenCV installed (e.g. cv2 module in th ...

  2. angular 定时函数

    注入$interval,$timeout   服务 2.定义函数 var aa = $interval(function(){ $timout(function(){ ..... }) },,定时时间 ...

  3. vue 及sass安装

    推荐:https://www.cnblogs.com/Mr--Li/p/7921150.html

  4. js实现图片局部放大效果

    图片局部放大效果结合的知识点主要是DOM的操作,以及事件的应用,所以首先要对DOM的操作有一定了解,其次能对事件的应用有一定的累积. 如上图,可以看到,这是放大镜的基本效果,主要分成左右两个部分.左边 ...

  5. 初识Hibernate框架,进行简单的增删改查操作

    Hibernate的优势 优秀的Java 持久化层解决方案  (DAO) 主流的对象—关系映射工具产品 简化了JDBC 繁琐的编码 将数据库的连接信息都存放在配置文件 自己的ORM框架 一定要手动实现 ...

  6. String Method的字符串变换的一个例子

    <!DOCTYPE html> <html lang="en"><head> <meta charset="UTF-8" ...

  7. UVA548 tree的思路

    唔,首先这题给出了中序遍历和后序遍历要求我们求出, 一个叶子节点到根的数值总和最小,且这个叶子节点是最小的那个 这题的难点在于如何运用中序遍历和后序遍历还原整棵树, 这里有两个方法: 1. 递归构造原 ...

  8. Idea常用功能汇总

    1.格式化代码:Ctrl+Alt+L 2.重命名变量:光标停留在变量上,Shift+F6 3.打开文件或者项目所在目录: 右键>Show in Explorer 4.添加包围代码块的快捷键:Ct ...

  9. vue+koa实现简单的图书小程序(2)

    记录一下实现我们图书的扫码功能: https://developers.weixin.qq.com/miniprogram/dev/api/scancode.html要多读文档 scanBook () ...

  10. IDEA 自动生成Hibernate实体类和Mapping文件

    一.新建工程Demo(如果选的时候勾选了hibernate,IDEA会自动下载Hibernate包,不需要手动导入) 二.导入相关包 Mysql && Hibernate 三.添加Hi ...