Pandas系列(十三)-其他常用功能

一、统计数据频率

 1. values_counts

pd.value_counts(df.column_name)
df.column_name.value_counts()

Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)[source]
Return a Series containing counts of unique values.

  参数详解

normalize : boolean, default False
If True then the object returned will contain the relative frequencies of the unique values.

sort : boolean, default True
Sort by values.

ascending : boolean, default False
Sort in ascending order.

bins : integer, optional
Rather than count values, group them into half-open bins, a convenience for pd.cut, only works with numeric data.

dropna : boolean, default True
Don’t include counts of NaN.

  参数示例讲解

index = pd.Index([3, 1, 2, 3, 4, np.nan])
index.value_counts()
Out[144]:
3.0    2
4.0    1
2.0    1
1.0    1
dtype: int64
index.value_counts(normalize=True)
Out[145]:
3.0    0.4
4.0    0.2
2.0    0.2
1.0    0.2
dtype: float64
index.value_counts(bins=3)
Out[146]:
(2.0, 3.0]      2
(0.996, 2.0]    2
(3.0, 4.0]      1
dtype: int64
index.value_counts(dropna=False)
Out[148]:
 3.0    2
NaN     1
 4.0    1
 2.0    1
 1.0    1
dtype: int64 

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‘])

In [22]: data
Out[22]:
   a  b   c  d
0  1  2   3  4
1  5  6  11  1
2  1  1   1  2
3  2  2   2  3

In [23]: pd.value_counts(data.a)
Out[23]:
1    2
2    1
5    1
Name: a, dtype: int64

In [26]: pd.value_counts(data.a).sort_index()
Out[26]:
1    2
2    1
5    1
Name: a, dtype: int64

In [27]: pd.value_counts(data.a).sort_index().index
Out[27]: Int64Index([1, 2, 5], dtype=‘int64‘)

In [28]: pd.value_counts(data.a).sort_index().values
Out[28]: array([2, 1, 1], dtype=int64)

values_count实例

 2.类别中属性的个数

# 方式一
cat_uniques = []
for cat in cat_features:
    cat_uniques.append(len(train[cat].unique()))
uniq_values_in_categories = pd.DataFrame.from_items([(‘cat_name‘, cat_features), (‘unique_values‘, cat_uniques)])

# 方式二
list(map(lambda x: len(train[x]),cat_featrues))

 3.唯一值

二、数据去重

    def drop_duplicates(self, subset=None, keep=‘first‘, inplace=False):
        """
        Return DataFrame with duplicate rows removed, optionally only
        considering certain columns

        Parameters
        ----------
        subset : column label or sequence of labels, optional
            Only consider certain columns for identifying duplicates, by
            default use all of the columns
        keep : {‘first‘, ‘last‘, False}, default ‘first‘
            - ``first`` : Drop duplicates except for the first occurrence.
            - ``last`` : Drop duplicates except for the last occurrence.
            - False : Drop all duplicates.
        inplace : boolean, default False
            Whether to drop duplicates in place or to return a copy

        Returns
        -------
        deduplicated : DataFrame
        """

三、数据类型转换

四、聚合方法

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
pd.set_option(‘display.max_columns‘,None)
df = pd.read_csv(‘911.csv‘)
print(df.head(1))
         lat        lng                                               desc  0  40.297876 -75.581294  REINDEER CT & DEAD END;  NEW HANOVER; Station ...
       zip                   title            timeStamp          twp  0  19525.0  EMS: BACK PAINS/INJURY  2015-12-10 17:10:52  NEW HANOVER
                     addr  e
0  REINDEER CT & DEAD END  1
df.info()
<class ‘pandas.core.frame.DataFrame‘>
RangeIndex: 249737 entries, 0 to 249736
Data columns (total 9 columns):
lat          249737 non-null float64
lng          249737 non-null float64
desc         249737 non-null object
zip          219391 non-null float64
title        249737 non-null object
timeStamp    249737 non-null object
twp          249644 non-null object
addr         249737 non-null object
e            249737 non-null int64
dtypes: float64(3), int64(1), object(5)
memory usage: 17.1+ MB
#获取分类
temp_list = df.title.str.split(‘:‘).tolist()
cate_list = list(set([i[0] for i in temp_list]))
cate_list
Out[152]: [‘Fire‘, ‘Traffic‘, ‘EMS‘]
#构造全为0的数组
zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(cate_list))),columns=cate_list)
#赋值
for cate in cate_list:
    zeros_df[cate][df.title.str.contains(cate)] = 1
print(zeros_df)
        Fire  Traffic  EMS
0        0.0      0.0  1.0
1        0.0      0.0  1.0
2        1.0      0.0  0.0
3        0.0      0.0  1.0
4        0.0      0.0  1.0
5        0.0      0.0  1.0
6        0.0      0.0  1.0
7        0.0      0.0  1.0
8        0.0      0.0  1.0
9        0.0      1.0  0.0
10       0.0      1.0  0.0
11       0.0      1.0  0.0
12       0.0      1.0  0.0
13       0.0      1.0  0.0
14       0.0      1.0  0.0
15       0.0      1.0  0.0
16       0.0      0.0  1.0
17       0.0      0.0  1.0
18       0.0      0.0  1.0
19       0.0      1.0  0.0
20       0.0      1.0  0.0
21       0.0      1.0  0.0
22       1.0      0.0  0.0
23       0.0      1.0  0.0
24       0.0      1.0  0.0
25       0.0      0.0  1.0
26       0.0      0.0  1.0
27       1.0      0.0  0.0
28       0.0      1.0  0.0
29       0.0      1.0  0.0
      ...      ...  ...
249707   0.0      1.0  0.0
249708   1.0      0.0  0.0
249709   0.0      0.0  1.0
249710   0.0      1.0  0.0
249711   0.0      1.0  0.0
249712   0.0      0.0  1.0
249713   1.0      0.0  0.0
249714   1.0      0.0  0.0
249715   0.0      1.0  0.0
249716   0.0      0.0  1.0
249717   0.0      0.0  1.0
249718   1.0      0.0  0.0
249719   0.0      0.0  1.0
249720   0.0      0.0  1.0
249721   0.0      0.0  1.0
249722   0.0      1.0  0.0
249723   0.0      0.0  1.0
249724   0.0      0.0  1.0
249725   0.0      0.0  1.0
249726   1.0      0.0  0.0
249727   1.0      0.0  0.0
249728   0.0      1.0  0.0
249729   0.0      0.0  1.0
249730   0.0      0.0  1.0
249731   0.0      1.0  0.0
249732   0.0      0.0  1.0
249733   0.0      0.0  1.0
249734   0.0      0.0  1.0
249735   1.0      0.0  0.0
249736   0.0      1.0  0.0
[249737 rows x 3 columns]
sum_ret = zeros_df.sum(axis=0)
print(sum_ret)
Fire        37432.0
Traffic     87465.0
EMS        124844.0
dtype: float64

不同类型紧急情况统计

df = pd.read_csv(‘911.csv‘)
# print(df.head(1))
# print(df.info())
#获取分类
temp_list = df.title.str.split(‘:‘).tolist()
cate_list = [i[0] for i in temp_list]
df[‘cate‘] = pd.DataFrame(np.array(cate_list).reshape(df.shape[0],1))
print(df.groupby(by=‘cate‘).count()[‘title‘])
cate
EMS        124840
Fire        37432
Traffic     87465
Name: title, dtype: int64

实例2

五、分布分析

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

 实例

import numpy
import pandas
from pandas import read_csv
data = read_csv(‘E:/python/data_analysis/data/dis-cut.csv‘)
bins = [data[‘年龄‘].min()-1,20,30,40,max(data.年龄)+1]
labels = [‘20岁及以下‘,‘21岁到30岁‘,‘31岁到40岁‘,‘41岁以上‘]
age_cut = pandas.cut(data.年龄,bins,labels=labels)
data[‘年龄分层‘] = age_cut
result = data.groupby(by=[‘年龄分层‘])[‘年龄‘].agg([‘size‘,‘mean‘])
result.rename(columns= {‘size‘: ‘人数‘,‘mean‘: ‘平均年龄‘})
Out[171]:
            人数       平均年龄
年龄分层
20岁及以下    2061  19.302280
21岁到30岁  46858  25.759081
31岁到40岁   8729  33.095773
41岁以上     1453  50.625602

 六、交叉分析

import pandas
from pandas import read_csv
data = read_csv(‘E:/python/data_analysis/data/pivot_table.csv‘)
bins = [data[‘年龄‘].min() - 1, 20, 30, 40, max(data.年龄) + 1]
labels = [‘20岁及以下‘, ‘21岁到30岁‘, ‘31岁到40岁‘, ‘41岁以上‘]
age_cut = pandas.cut(data.年龄, bins, labels=labels)
data[‘年龄分层‘] = age_cut
r1 = data.pivot_table(
    values=[‘年龄‘],
    index=[‘年龄分层‘],
    columns=[‘性别‘],
    aggfunc=[numpy.size, numpy.mean]
)
r2 = data.pivot_table(
    values=[‘年龄‘],
    index=[‘年龄分层‘],
    columns=[‘性别‘],
    aggfunc=[numpy.std],
)
print(r1.index)
print(r1[‘size‘][‘年龄‘][‘女‘])
print(r1.join(r2))
CategoricalIndex([‘41岁以上‘, ‘21岁到30岁‘, ‘31岁到40岁‘, ‘20岁及以下‘], categories=[‘20岁及以下‘, ‘21岁到30岁‘, ‘31岁到40岁‘, ‘41岁以上‘], ordered=True, name=‘年龄分层‘, dtype=‘category‘)
年龄分层
41岁以上       111
21岁到30岁    2903
31岁到40岁     735
20岁及以下      567
Name: 女, dtype: int64
         size              mean                  std
           年龄                年龄                   年龄
性别          女      男          女          男         女         男
年龄分层
41岁以上     111   1950  18.972973  19.321026  1.708053  1.044185
21岁到30岁  2903  43955  25.954874  25.746149  2.453642  2.361298
31岁到40岁   735   7994  33.213605  33.084939  2.316704  2.200319
20岁及以下    567    886  51.691358  49.943567  6.761848  7.914171

交叉分析pivot_table案例

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

交叉分析crosstab案例

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

原文地址:https://www.cnblogs.com/zhangyafei/p/10520410.html

时间: 2024-11-15 06:35:58

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

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

前言 本文为Harbor技术分享系列的第4部分也是初级部分的完结篇,下个阶段作者将会进阶分享,更多详细的内容将会将会在文中介绍. 云盘链接 链接:https://pan.baidu.com/s/1PTHHAqrRC41sesRuLtr2Tg 密码:2z9f 通过本文无法把本文中的实验进行成功,请联系作者本人,作者会录制视频发送给您 如果大家有比较好的技术分享平台或者博客平台等欢迎分享,感谢. 不得不吐槽博客园的编辑器真心用不太习惯.建议大家下载完成可以使用 typora编辑器进行阅读. 如果转载

前端日常开发常用功能系列之节流

这是前端日常开发常用功能这个系列文章的第一篇,该系列是日常开发中一些常用的功能的再总结.再提炼,以防止遗忘,便于日后复习.该系列预计包含以下内容: 防抖.节流.去重.拷贝.最值.扁平.偏函数.柯里.惰性函数.递归.乱序.排序.注入.上传.下载.截图...  什么是节流? 节流就是如果你持续触发事件,每隔一段时间,只执行一次事件. 为什么要进行节流? 在频繁触发事件的场景,有些情况可能执行的逻辑比较复杂或者耗时,此时浏览器的处理跟不上触发,就会发生卡顿.假死或者事件堆积,为了解决这个故障,节流是其

前端日常开发常用功能系列之数组去重

这是前端日常开发常用功能这个系列文章的第一篇,该系列是日常开发中一些常用的功能的再总结.再提炼,以防止遗忘,便于日后复习.该系列预计包含以下内容: 防抖.节流.去重.拷贝.最值.扁平.偏函数.柯里.惰性函数.递归.乱序.排序.注入.上传.下载.截图... 本文所记录的数组去重方法只针对一维数组,且数组项都是基本数据类型值 方法一: 二重循环比较去重(因为使用的是‘===’比较,适合数组项为数值.字符串的数组) const unique1 = arr => { const tempArr = ar

【DRP】-Dao层常用功能代码:增删改查

本系列博客内容为:做DRP系统中Dao层常用功能. 该项目采用MVC架构 C(Controller)控制器,主要职责;1.取得表单参数:2.调用业务逻辑:3.转向页面 M(Model)模型,主要职责:1.业务逻辑:2.保存数据的状态 V(View)视图,主要职责:显示 本文主要是针对于Dao层的常见使用方法:增删改查sql语句及常用操作. 1 package com.bjpowernode.drp.basedata.dao; 2 3 import java.sql.Connection; 4 i

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

Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单片机或者嵌入式开发人员的不二选择. 从今天开始的接下来一些时间总结关于Keil的使用方法.计划前一阶段总结常见功能,后面综合性的总结Keil的功能. 关注我的朋友应该知道,我前面已经总结过Keil下载与安装 和 Keil新建软件工程这两篇文章,今天接着上面的文章来总结Keil使用方法之常用功能. 使

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

原文:从零开始学习jQuery (十) jQueryUI常用功能实战 本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开始学习jQuery (七) jQuery动画-让页面动起来! 从零开始

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

原文:<BI那点儿事>浅析十三种常用的数据挖掘的技术 一.前沿 数据挖掘就是从大量的.不完全的.有噪声的.模糊的.随机的数据中,提取隐含在其中的.人们事先不知道的但又是潜在有用的信息和知识的过程.数据挖掘的任务是从数据集中发现模式,可以发现的模式有很多种,按功能可以分为两大类:预测性(Predictive)模式和描述性(Descriptive)模式.在应用中往往根据模式的实际作用细分为以下几种:分类,估值,预测,相关性分析,序列,时间序列,描述和可视化等. 数据挖掘涉及的学科领域和技术很多,有

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

快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------------------------------------------------------------------------------ 不知众多Android开发者是否在程序开发的工程中也遇到过下面的问题: 0.如何在众多log中快速找到你设置打印的那行log? 1.是否还在不断的切换标签来

Intellij idea 系列教程之常用配置项

Intellij idea 系列教程之常用配置项 Intellij idea 系列教程目录(https://www.cnblogs.com/binarylei/p/10347600.html) Language level 和 Java Compiler 版本自动变化问题 去除 IDEA 报黄色灰色的重复代码的下划波浪线 添加过滤文件或目录 一.Language level 和 Java Compiler 版本自动变化问题 最近将 Intellij Idea 的版本升级之后,在对 maven 项

js常用功能代码

js常用功能代码(持续更新): 1,--折叠与展开 <input id="btnDisplay" type="button" class="baocun2" value="添加" onclick="changeDisplay()" /> <script type="text/javascript"> function changeDisplay() { var h