一、统计数据频率

 1. values_counts

  1. pd.value_counts(df.column_name)
  2. df.column_name.value_counts()
  3.  
  4. Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)[source]
  5. Return a Series containing counts of unique values.

  参数详解

  1. normalize : boolean, default False
  2. If True then the object returned will contain the relative frequencies of the unique values.
  3.  
  4. sort : boolean, default True
  5. Sort by values.
  6.  
  7. ascending : boolean, default False
  8. Sort in ascending order.
  9.  
  10. bins : integer, optional
  11. Rather than count values, group them into half-open bins, a convenience for pd.cut, only works with numeric data.
  12.  
  13. dropna : boolean, default True
  14. Dont include counts of NaN.

  参数示例讲解

  1. index = pd.Index([3, 1, 2, 3, 4, np.nan])
  2. index.value_counts()
  3. Out[144]:
  4. 3.0 2
  5. 4.0 1
  6. 2.0 1
  7. 1.0 1
  8. dtype: int64
  9. index.value_counts(normalize=True)
  10. Out[145]:
  11. 3.0 0.4
  12. 4.0 0.2
  13. 2.0 0.2
  14. 1.0 0.2
  15. dtype: float64
  16. index.value_counts(bins=3)
  17. Out[146]:
  18. (2.0, 3.0] 2
  19. (0.996, 2.0] 2
  20. (3.0, 4.0] 1
  21. dtype: int64
  22. index.value_counts(dropna=False)
  23. Out[148]:
  24. 3.0 2
  25. NaN 1
  26. 4.0 1
  27. 2.0 1
  28. 1.0 1
  29. dtype: int64 
  1. In [21]: data=pd.DataFrame(pd.Series([1,2,3,4,5,6,11,1,1,1,1,2,2,2,2,3]).values.reshape(4,4),columns=['a','b','c','d'])
  2.  
  3. In [22]: data
  4. Out[22]:
  5. a b c d
  6. 0 1 2 3 4
  7. 1 5 6 11 1
  8. 2 1 1 1 2
  9. 3 2 2 2 3
  10.  
  11. In [23]: pd.value_counts(data.a)
  12. Out[23]:
  13. 1 2
  14. 2 1
  15. 5 1
  16. Name: a, dtype: int64
  17.  
  18. In [26]: pd.value_counts(data.a).sort_index()
  19. Out[26]:
  20. 1 2
  21. 2 1
  22. 5 1
  23. Name: a, dtype: int64
  24.  
  25. In [27]: pd.value_counts(data.a).sort_index().index
  26. Out[27]: Int64Index([1, 2, 5], dtype='int64')
  27.  
  28. In [28]: pd.value_counts(data.a).sort_index().values
  29. Out[28]: array([2, 1, 1], dtype=int64)

values_count实例

 2.类别中属性的个数

  1. # 方式一
  2. cat_uniques = []
  3. for cat in cat_features:
  4. cat_uniques.append(len(train[cat].unique()))
  5. uniq_values_in_categories = pd.DataFrame.from_items([('cat_name', cat_features), ('unique_values', cat_uniques)])
  6.  
  7. # 方式二
  8. list(map(lambda x: len(train[x]),cat_featrues))

 3.唯一值

二、数据去重

  1. def drop_duplicates(self, subset=None, keep='first', inplace=False):
  2. """
  3. Return DataFrame with duplicate rows removed, optionally only
  4. considering certain columns
  5.  
  6. Parameters
  7. ----------
  8. subset : column label or sequence of labels, optional
  9. Only consider certain columns for identifying duplicates, by
  10. default use all of the columns
  11. keep : {'first', 'last', False}, default 'first'
  12. - ``first`` : Drop duplicates except for the first occurrence.
  13. - ``last`` : Drop duplicates except for the last occurrence.
  14. - False : Drop all duplicates.
  15. inplace : boolean, default False
  16. Whether to drop duplicates in place or to return a copy
  17.  
  18. Returns
  19. -------
  20. deduplicated : DataFrame
  21. """

  1. duplicated()方法
  • 查看列是否重复
  1. dataframe.colname.duplicated()
  • 查看整行是否重复
  1. dataframe.duplicated()
  • 查看subset是否重复
  1. dataframe.duplicated(subset = [])
  1. drop_duplicats()方法
    用于丢弃重复项
  1. dataframe.drop_duplicats()
  1. 参数keep
    keep可以为first和last,表示是选择最前一项还是最后一项保留。
  1. dataframe.duplicated(keep = "first")
  2. dataframe.duplicated(keep = "last")

也可以设置布尔类型,当设为False时候,重复项将都被显示。

  1. dataframe.duplicated(keep = "False")

三、数据类型转换

四、聚合方法

  1. import pandas as pd
  2. from matplotlib import pyplot as plt
  3. import numpy as np
  4. pd.set_option('display.max_columns',None)
  5. df = pd.read_csv('911.csv')
  6. print(df.head(1))
  7. lat lng desc \
  8. 0 40.297876 -75.581294 REINDEER CT & DEAD END; NEW HANOVER; Station ...
  9. zip title timeStamp twp \
  10. 0 19525.0 EMS: BACK PAINS/INJURY 2015-12-10 17:10:52 NEW HANOVER
  11. addr e
  12. 0 REINDEER CT & DEAD END 1
  13. df.info()
  14. <class 'pandas.core.frame.DataFrame'>
  15. RangeIndex: 249737 entries, 0 to 249736
  16. Data columns (total 9 columns):
  17. lat 249737 non-null float64
  18. lng 249737 non-null float64
  19. desc 249737 non-null object
  20. zip 219391 non-null float64
  21. title 249737 non-null object
  22. timeStamp 249737 non-null object
  23. twp 249644 non-null object
  24. addr 249737 non-null object
  25. e 249737 non-null int64
  26. dtypes: float64(3), int64(1), object(5)
  27. memory usage: 17.1+ MB
  28. #获取分类
  29. temp_list = df.title.str.split(':').tolist()
  30. cate_list = list(set([i[0] for i in temp_list]))
  31. cate_list
  32. Out[152]: ['Fire', 'Traffic', 'EMS']
  33. #构造全为0的数组
  34. zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(cate_list))),columns=cate_list)
  35. #赋值
  36. for cate in cate_list:
  37. zeros_df[cate][df.title.str.contains(cate)] = 1
  38. print(zeros_df)
  39. Fire Traffic EMS
  40. 0 0.0 0.0 1.0
  41. 1 0.0 0.0 1.0
  42. 2 1.0 0.0 0.0
  43. 3 0.0 0.0 1.0
  44. 4 0.0 0.0 1.0
  45. 5 0.0 0.0 1.0
  46. 6 0.0 0.0 1.0
  47. 7 0.0 0.0 1.0
  48. 8 0.0 0.0 1.0
  49. 9 0.0 1.0 0.0
  50. 10 0.0 1.0 0.0
  51. 11 0.0 1.0 0.0
  52. 12 0.0 1.0 0.0
  53. 13 0.0 1.0 0.0
  54. 14 0.0 1.0 0.0
  55. 15 0.0 1.0 0.0
  56. 16 0.0 0.0 1.0
  57. 17 0.0 0.0 1.0
  58. 18 0.0 0.0 1.0
  59. 19 0.0 1.0 0.0
  60. 20 0.0 1.0 0.0
  61. 21 0.0 1.0 0.0
  62. 22 1.0 0.0 0.0
  63. 23 0.0 1.0 0.0
  64. 24 0.0 1.0 0.0
  65. 25 0.0 0.0 1.0
  66. 26 0.0 0.0 1.0
  67. 27 1.0 0.0 0.0
  68. 28 0.0 1.0 0.0
  69. 29 0.0 1.0 0.0
  70. ... ... ...
  71. 249707 0.0 1.0 0.0
  72. 249708 1.0 0.0 0.0
  73. 249709 0.0 0.0 1.0
  74. 249710 0.0 1.0 0.0
  75. 249711 0.0 1.0 0.0
  76. 249712 0.0 0.0 1.0
  77. 249713 1.0 0.0 0.0
  78. 249714 1.0 0.0 0.0
  79. 249715 0.0 1.0 0.0
  80. 249716 0.0 0.0 1.0
  81. 249717 0.0 0.0 1.0
  82. 249718 1.0 0.0 0.0
  83. 249719 0.0 0.0 1.0
  84. 249720 0.0 0.0 1.0
  85. 249721 0.0 0.0 1.0
  86. 249722 0.0 1.0 0.0
  87. 249723 0.0 0.0 1.0
  88. 249724 0.0 0.0 1.0
  89. 249725 0.0 0.0 1.0
  90. 249726 1.0 0.0 0.0
  91. 249727 1.0 0.0 0.0
  92. 249728 0.0 1.0 0.0
  93. 249729 0.0 0.0 1.0
  94. 249730 0.0 0.0 1.0
  95. 249731 0.0 1.0 0.0
  96. 249732 0.0 0.0 1.0
  97. 249733 0.0 0.0 1.0
  98. 249734 0.0 0.0 1.0
  99. 249735 1.0 0.0 0.0
  100. 249736 0.0 1.0 0.0
  101. [249737 rows x 3 columns]
  102. sum_ret = zeros_df.sum(axis=0)
  103. print(sum_ret)
  104. Fire 37432.0
  105. Traffic 87465.0
  106. EMS 124844.0
  107. dtype: float64

不同类型紧急情况统计

  1. df = pd.read_csv('911.csv')
  2. # print(df.head(1))
  3. # print(df.info())
  4. #获取分类
  5. temp_list = df.title.str.split(':').tolist()
  6. cate_list = [i[0] for i in temp_list]
  7. df['cate'] = pd.DataFrame(np.array(cate_list).reshape(df.shape[0],1))
  8. print(df.groupby(by='cate').count()['title'])
  9. cate
  10. EMS 124840
  11. Fire 37432
  12. Traffic 87465
  13. Name: title, dtype: int64

实例2

五、分布分析

  1. pd.cut(data['col_names'], bins, labels=None)

 实例

  1. import numpy
  2. import pandas
  3. from pandas import read_csv
  4. data = read_csv('E:/python/data_analysis/data/dis-cut.csv')
  5. bins = [data['年龄'].min()-1,20,30,40,max(data.年龄)+1]
  6. labels = ['20岁及以下','21岁到30岁','31岁到40岁','41岁以上']
  7. age_cut = pandas.cut(data.年龄,bins,labels=labels)
  8. data['年龄分层'] = age_cut
  9. result = data.groupby(by=['年龄分层'])['年龄'].agg(['size','mean'])
  10. result.rename(columns= {'size': '人数','mean': '平均年龄'})
  11. Out[171]:
  12. 人数 平均年龄
  13. 年龄分层
  14. 20岁及以下 2061 19.302280
  15. 21岁到30 46858 25.759081
  16. 31岁到40 8729 33.095773
  17. 41岁以上 1453 50.625602

 六、交叉分析

  1. import pandas
  2. from pandas import read_csv
  3. data = read_csv('E:/python/data_analysis/data/pivot_table.csv')
  4. bins = [data['年龄'].min() - 1, 20, 30, 40, max(data.年龄) + 1]
  5. labels = ['20岁及以下', '21岁到30岁', '31岁到40岁', '41岁以上']
  6. age_cut = pandas.cut(data.年龄, bins, labels=labels)
  7. data['年龄分层'] = age_cut
  8. r1 = data.pivot_table(
  9. values=['年龄'],
  10. index=['年龄分层'],
  11. columns=['性别'],
  12. aggfunc=[numpy.size, numpy.mean]
  13. )
  14. r2 = data.pivot_table(
  15. values=['年龄'],
  16. index=['年龄分层'],
  17. columns=['性别'],
  18. aggfunc=[numpy.std],
  19. )
  20. print(r1.index)
  21. print(r1['size']['年龄']['女'])
  22. print(r1.join(r2))
  23. CategoricalIndex(['41岁以上', '21岁到30岁', '31岁到40岁', '20岁及以下'], categories=['20岁及以下', '21岁到30岁', '31岁到40岁', '41岁以上'], ordered=True, name='年龄分层', dtype='category')
  24. 年龄分层
  25. 41岁以上 111
  26. 21岁到30 2903
  27. 31岁到40 735
  28. 20岁及以下 567
  29. Name: 女, dtype: int64
  30. size mean std
  31. 年龄 年龄 年龄
  32. 性别
  33. 年龄分层
  34. 41岁以上 111 1950 18.972973 19.321026 1.708053 1.044185
  35. 21岁到30 2903 43955 25.954874 25.746149 2.453642 2.361298
  36. 31岁到40 735 7994 33.213605 33.084939 2.316704 2.200319
  37. 20岁及以下 567 886 51.691358 49.943567 6.761848 7.914171

交叉分析pivot_table案例

  1. import pandas as pd
  2. import numpy as np
  3. data = pd.DataFrame({'Sample': range(1, 11), 'Gender': ['Female', 'Male', 'Female', 'Male', 'Male', 'Male', 'Female', 'Female', 'Male', 'Female'],
  4. 'Handedness': ['Right-handed', 'Left-handed', 'Right-handed', 'Right-handed', 'Left-handed', 'Right-handed', 'Right-handed', 'Left-handed', 'Right-handed', 'Right-handed']})
  5. #假设我们想要根据性别和用手习惯对这段数据进行#统计汇总。虽然可以用pivot_table()实现该功#能,但是pandas.crosstab()函数会更方便:
  6. # 方法一:用pivot_table
  7. # 其实我觉的一点都不麻烦ε=(´ο`*)))唉
  8. data.pivot_table(index=['Gender'], columns='Handedness', aggfunc=len, margins=True)
  9. Out[173]:
  10. Sample
  11. Handedness Left-handed Right-handed All
  12. Gender
  13. Female 1 4 5
  14. Male 2 3 5
  15. All 3 7 10
  16. # 方法二:用crosstab
  17. pd.crosstab(data.Gender, data.Handedness, margins=True)
  18. Out[174]:
  19. Handedness Left-handed Right-handed All
  20. Gender
  21. Female 1 4 5
  22. Male 2 3 5
  23. All 3 7 10

交叉分析crosstab案例

  • 透视表pivot_table()是一种进行分组统计的函数,参数aggfunc决定统计类型;
  • 交叉表crosstab()是一种特殊的pivot_table(),专用于计算分组频率。

具体使用参照 https://www.cnblogs.com/onemorepoint/p/8425300.html

七、格式化输出

pandas dataframe数据全部输出,数据太多也不用省略号表示。

  1. pd.set_option('display.max_columns',None)

或者

  1. with option_context('display.max_rows', 10, 'display.max_columns', 5):
  2. 代码逻辑

 八、索引

  

Pandas系列(十三)-其他常用功能的更多相关文章

  1. Harbor 学习分享系列4 - Harbor常用功能实验

    前言 本文为Harbor技术分享系列的第4部分也是初级部分的完结篇,下个阶段作者将会进阶分享,更多详细的内容将会将会在文中介绍. 云盘链接 链接:https://pan.baidu.com/s/1PT ...

  2. Python常用功能函数总结系列

    Python常用功能函数系列总结(一) 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 Python常用功能函数系列总结(二) 常用函数 ...

  3. Pandas常用功能

    在使用Pandas之前,需要导入pandas库 import pandas  as pd #pd作为pandas的别名 常用功能如下: 代码 功能1 .DataFrame()   创建一个DataFr ...

  4. 《BI那点儿事》浅析十三种常用的数据挖掘的技术

    一.前沿 数据挖掘就是从大量的.不完全的.有噪声的.模糊的.随机的数据中,提取隐含在其中的.人们事先不知道的但又是潜在有用的信息和知识的过程.数据挖掘的任务是从数据集中发现模式,可以发现的模式有很多种 ...

  5. 浅析十三种常用的数据挖掘的技术&五个免费开源的数据挖掘软件

    一.前 沿 数据挖掘就是从大量的.不完全的.有噪声的.模糊的.随机的数据中,提取隐含在其中的.人们事先不知道的但又是潜在有用的信息和知识的过程.数据挖掘的任务是从数据集中发现模式,可以发现的模式有很多 ...

  6. 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

    快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...

  7. Keil的使用方法 - 常用功能(一)

    Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单 ...

  8. 从零开始学习jQuery (十) jQueryUI常用功能实战

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是实战篇. 使用jQueryUI完成制作网站 ...

  9. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  10. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

随机推荐

  1. 【记录】Xmind8 Pro 激活

    摘要 XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生.作为一款有效提升工作和生活效率的生产力工具,受到全球百千万用户的青睐. [有能力请支持正版]     在xmin下载xmi ...

  2. Windows Service 学习系列(二):C# windows服务:安装、卸载、启动和停止Windows Service几种方式

    一.通过InstallUtil.exe安装.卸载.启动.停止Windows Service 方法一 1.以管理员身份运行cmd 2.安装windows服务 切换cd C:\Windows\Micros ...

  3. ElasticSearch(七):Java操作elasticsearch基于smartcn中文分词查询

    package com.gxy.ESChap01; import java.net.InetAddress; import org.elasticsearch.action.search.Search ...

  4. CSAPP:第八章 异常控制流2

    CSAPP:第八章 异常控制流2 关键点:进程控制.信号 8.4 进程控制8.5 信号 8.4 进程控制   Unix提供了大量从C程序中操作进程的系统调用.8.4.1 获取进程ID  每个进程都有一 ...

  5. (三)Installation

    Elasticsearch requires at least Java 8. Specifically as of this writing, it is recommended that you ...

  6. C# 对文本文件的几种读写方法总结

    计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集.基于Unicode字符集的编码方式有很多,比如UTF-7.UTF ...

  7. Maven基础入门与核心知识

    Apache Maven是一个软件项目管理和综合工具.基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件. Maven是一个项目管理和综合工具.Maven提供了开 ...

  8. 《通过C#学Proto.Actor模型》之Behaviors

    Behaviors就是Actor接收到消息后可以改变处理的方法,相同的Actor,每次调用,转到不同的Actor内方法执行,非常适合按流程进行的场景.Behaviors就通过在Actor内部实例化一个 ...

  9. jeecg字典表—普通表

    创建普通表 同步数据库(创建对应的表) 验证功能效果 添加用户表,并添加对应的级别属性 同步用户表 字典功能测试 然后生成最新代码,添加到菜单即可

  10. 利用CocoaHttpServer搭建手机本地服务器

    原理 使用CocoaHTTPServer框架,在iOS端建立一个本地服务器,只要电脑和手机连入同一热点或者说网络,就可以实现通过电脑浏览器访问iOS服务器的页面,利用POST实现文件的上传. 实现 1 ...