pandas(进阶操作)-- 处理非数值型数据 -- 数据分析三剑客(核心)

pandas,进阶,操作,处理,数值,数据,数据分析,三剑客,核心 · 浏览次数 : 15

小编点评

```python # 获取所有队主客场的总得分df.pivot_table(index='主客场',values='得分',aggfunc='sum') # 获取每个队主客场的总得分(在总得分的基础上又进行了对手的分类) # fill_value=0 空值补0df.pivot_table(index='主客场',values='得分',columns='对手',aggfunc='sum',fill_value=0) # 获取所有队主客场的总得分(在总得分的基础上又进行了对手的分类) # fill_value=0 空值补0df.pivot_table(index='主客场',values='得分',columns='对手',aggfunc='sum',fill_value=0) # 求出各个性别抽烟的人数 df.pivot_table(index='性别',values='抽烟',aggfunc='count') # 求出各个年龄段抽烟人情况 df.pivot_table(index='年龄段',values='抽烟',aggfunc='count') # 求出各个性别抽烟的人数 df.pivot_table(index='性别',values='抽烟',aggfunc='count') ``` ```排版语句 # 获取所有队主客场的总得分df.pivot_table(index='主客场',values='得分',aggfunc='sum') # 获取每个队主客场的总得分(在总得分的基础上又进行了对手的分类) # fill_value=0 空值补0df.pivot_table(index='主客场',values='得分',columns='对手',aggfunc='sum',fill_value=0) # 获取所有队主客场的总得分(在总得分的基础上又进行了对手的分类) # fill_value=0 空值补0df.pivot_table(index='主客场',values='得分',columns='对手',aggfunc='sum',fill_value=0) # 求出各个性别抽烟的人数 df.pivot_table(index='性别',values='抽烟',aggfunc='count') # 求出各个年龄段抽烟人情况 df.pivot_table(index='年龄段',values='抽烟',aggfunc='count') # 求出各个性别抽烟的人数 df.pivot_table(index='性别',values='抽烟',aggfunc='count') ```

正文

博客地址:https://www.cnblogs.com/zylyehuo/

开发环境

  • anaconda
    • 集成环境:集成好了数据分析和机器学习中所需要的全部环境
    • 安装目录不可以有中文和特殊符号
  • jupyter
    • anaconda提供的一个基于浏览器的可视化开发工具
import numpy as np
import pandas as pd
from pandas import DataFrame

替换操作

  • 替换操作可以同步作用于Series和DataFrame中
  • 单值替换
    • 普通替换: 替换所有符合要求的元素:to_replace=15,value='e'
    • 按列指定单值替换: to_replace={列标签:替换值} value='value'
  • 多值替换
    • 列表替换: to_replace=[] value=[]
    • 字典替换(推荐) to_replace=
df = DataFrame(data=np.random.randint(0,100,size=(5,6)))
df

df.replace(to_replace=0,value='Zero')

df.replace(to_replace={10:'Ten'})

# 将指定列的元素进行替换to_replase={列索引:被替换的值}
df.replace(to_replace={3:0},value='Zero')

映射操作(重点)

  • 概念:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表现形式)
  • 创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名
dic = {
    'name':['张三','李四','张三'],
    'salary':[15000,20000,15000]
}
df = DataFrame(data=dic)
df

# 映射关系表
dic = {
    '张三':'tom',
    '李四':'jack'
}
# map是Series的方法,只能被Series调用
df['e_name'] = df['name'].map(dic)
df

运算工具

  • 超过3000部分的钱缴纳50%的税,计算每个人的税后薪资
# 该函数是我们指定的一个运算法则
def after_sal(s):#计算s对应的税后薪资
    return s - (s-3000)*0.5
# map是Series的方法,只能被Series调用    
df['after_sal'] = df['salary'].map(after_sal)  # 可以将df['salary']这个Series中每一个元素(薪资)作为参数传递给s
df

排序实现的随机抽样

  • take()
  • np.random.permutation()
df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])
df

# 生成乱序的随机序列
np.random.permutation(10)
array([8, 9, 6, 2, 5, 3, 1, 0, 7, 4])

将原始数据打乱

打乱列

# [2,0,1] 只能使用隐式索引
# df.take([2,0,1],axis=1)
df.take(np.random.permutation(3),axis=1)

打乱行

df.take(np.random.permutation(3),axis=1).take(np.random.permutation(100),axis=0)[0:50]
df.take(np.random.permutation(3),axis=1).take(np.random.permutation(100),axis=0)[0:50].head()

数据的分类处理(重点)

  • 数据分类处理的核心:
    • groupby()函数
    • groups属性查看分组情况
df = DataFrame({'item':['Apple','Banana','Orange','Banana','Orange','Apple'],
                'price':[4,3,3,2.5,4,2],
               'color':['red','yellow','yellow','green','green','green'],
               'weight':[12,20,50,30,20,44]})
df

按指定属性进行分类

# 对水果的种类进行分类
df.groupby(by='item')
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000290D4BAA910>

查看详细的分组情况

df.groupby(by='item').groups
{'Apple': [0, 5], 'Banana': [1, 3], 'Orange': [2, 4]}

分组聚合

计算出每一种水果的平均价格

df.groupby(by='item')['price'].mean()
item
Apple     3.00
Banana    2.75
Orange    3.50
Name: price, dtype: float64

计算每一种颜色对应水果的平均重量

df.groupby(by='color')['weight'].mean()
color
green     31.333333
red       12.000000
yellow    35.000000
Name: weight, dtype: float64
dic = df.groupby(by='color')['weight'].mean().to_dict()
dic
{'green': 31.333333333333332, 'red': 12.0, 'yellow': 35.0}

将计算出的平均重量汇总到源数据

df['mean_w'] = df['color'].map(dic)
df

高级数据聚合

  • 使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算
  • df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)
  • transform和apply都会进行运算,在transform或者apply中传入函数即可
  • transform和apply也可以传入一个lambda表达式
def my_mean(s):
    m_sum = 0
    for i in s:
        m_sum += i
    return m_sum / len(s)
df.groupby(by='item')['price'].transform(my_mean)  # 返回的是经过映射的结果
0    3.00
1    2.75
2    3.50
3    2.75
4    3.50
5    3.00
Name: price, dtype: float64
df.groupby(by='item')['price'].apply(my_mean)  # 返回的是未经过映射的结果
item
Apple     3.00
Banana    2.75
Orange    3.50
Name: price, dtype: float64

数据加载

  • 读取type-.txt文件数据
df = pd.read_csv('./data/type-.txt')
df

df.shape
(2, 1)

将文件中每一个词作为元素存放在DataFrame中

pd.read_csv('./data/type-.txt',header=None,sep='-')

读取数据库中的数据

连接数据库,获取连接对象

import sqlite3 as sqlite3
conn = sqlite3.connect('./data/weather_2012.sqlite')

读取库表中的数据值

sql_df=pd.read_sql('select * from weather_2012',conn)
sql_df

将一个df中的数据值写入存储到db

df.to_sql('sql_data456',conn)
2

透视表(重点)

  • 透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table。
  • 透视表的优点:
    • 灵活性高,可以随意定制你的分析计算要求
    • 脉络清晰易于理解数据
    • 操作性强,报表神器
import pandas as pd
import numpy as np
df = pd.read_csv('./data/透视表-篮球赛.csv',encoding='utf8')
df

pivot_table有四个最重要的参数index、values、columns、aggfunc

index参数:分类汇总的分类条件

  • 每个pivot_table必须拥有一个index。如果想查看哈登对阵每个队伍的得分则需要对每一个队进行分类并计算其各类得分的平均值:
  • 想看看哈登对阵同一对手在不同主客场下的数据,分类条件为对手和主客场
df.pivot_table(index=['对手','主客场'])

values参数:需要对计算的数据进行筛选

  • 如果我们只需要哈登在主客场和不同胜负情况下的得分、篮板与助攻三项数据
df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'])

Aggfunc参数:设置我们对数据聚合时进行的函数操作

  • 当我们未设置aggfunc时,它默认aggfunc='mean'计算均值。
  • 还想获得james harden在主客场和不同胜负情况下的总得分、总篮板、总助攻时
df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'],aggfunc='sum')

Columns:可以设置列层次字段

  • 对values字段进行分类
# 获取所有队主客场的总得分
df.pivot_table(index='主客场',values='得分',aggfunc='sum')

# 获取每个队主客场的总得分(在总得分的基础上又进行了对手的分类)
# fill_value=0 空值补0
df.pivot_table(index='主客场',values='得分',columns='对手',aggfunc='sum',fill_value=0)

交叉表

  • 是一种用于计算分组的特殊透视图,对数据进行汇总
  • pd.crosstab(index,colums)
    • index:分组数据,交叉表的行索引
    • columns:交叉表的列索引
import pandas as pd
from pandas import DataFrame
df = DataFrame({'sex':['man','man','women','women','man','women','man','women','women'],
               'age':[15,23,25,17,35,57,24,31,22],
               'smoke':[True,False,False,True,True,False,False,True,False],
               'height':[168,179,181,166,173,178,188,190,160]})
df

求出各个性别抽烟的人数

# pd.crosstab(行索引,列索引)
pd.crosstab(df.smoke,df.sex)

求出各个年龄段抽烟人情况

pd.crosstab(df.age,df.smoke)

与pandas(进阶操作)-- 处理非数值型数据 -- 数据分析三剑客(核心)相似的内容:

pandas(进阶操作)-- 处理非数值型数据 -- 数据分析三剑客(核心)

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 import numpy as np

【pandas小技巧】--拆分列

拆分列是`pandas`中常用的一种数据操作,它可以将一个包含多个值的列按照指定的规则拆分成多个新列,方便进行后续的分析和处理。拆分列的使用场景比较广泛,以下是一些常见的应用场景: 1. 处理日期数据:在日期数据中,经常会将年、月、日等信息合并成一列,通过拆分列可以将其拆分成多个新列,方便进行时间序

pandas(进阶操作)-- 政治献金项目数据分析

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 import numpy as np

【pandas基础】--概述

Pandas是一个开源的Python数据分析库。 它提供了快速,灵活和富有表现力的数据结构,旨在使数据清洗和分析变得简单而快速。 Pandas是基于NumPy数组构建的,因此它在许多NumPy函数上提供了直接的支持。它还提供了用于对表格数据进行操作的数据结构,例如Series和DataFrame。

Pandas 使用教程 Series、DataFrame

[TOC] Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算) Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。 Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工

【pandas小技巧】--反转行列顺序

反转`pandas` `DataFrame`的行列顺序是一种非常实用的操作。在实际应用中,当我们需要对数据进行排列或者排序时,通常会使用到Pandas的行列反转功能。这个过程可以帮助我们更好地理解数据集,发现其中的规律和趋势。同时,行列反转还可以帮助我们将数据可视化,使得图表更加易于理解。 除了常规

【pandas基础】--索引和轴

在`pandas`中,索引(`index`)是用于访问数据的关键。 它为数据提供了基于标签的访问能力,类似于字典,可以根据标签查找和访问数据。 而`pandas`的轴(`axis`)是指数据表中的一个维度,可以理解为表格中的行和列。 通过指定轴,我们可以对数据进行切片、筛选、聚合等操作。 下面简要介

【pandas基础】--数据整理

pandas进行数据整理的意义在于,它是数据分析、数据科学和机器学习的前置步骤。 通过数据整理可以提前了解数据的概要,缺失值、重复值等情况,为后续的分析和建模提供更为可靠的数据基础。 本篇主要介绍利用pandas进行数据整理的各种方法。 1. 数据概要 获取数据概要信息可以帮助我们了解数据的基本情况

【pandas基础】--数据类型

数据类型是计算机编程中将不同类型的数据值分类和定义的方式。 通过数据类型,可以确定数据的存储方式和内存占用量,了解不同类型的数据进行各种运算的能力。 使用`pandas`进行数据分析时,最常用到的几种类型是: 1. 字符串类型,各类文本内容都是字符串类型 2. 数值类型,包括整数和浮点数,可用于计算

pandas:时间序列数据的周期转换

时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,然后再看数据是否会在新的周期上产生新的特性。 下面以模拟的K线数据为例,演示如何使用pandas来进行周期转换。 1. 创建测试数据 首先创建测试数据,下面创建一天的K