Python数据分析招式:pandas库过滤分组透视表-2

简介: Python数据分析招式:pandas库过滤分组透视表-2

相关: Python数据分析招式:pandas库提取清洗排序-1


要点:


数据的字符处理

数据的过滤

数据的分组

数据的透视表

引入数据

# -*- coding: utf-8 -*-
# @File    : 数据集的处理.py
# @Date    : 2018-06-03
import pandas as pd
file = "data/train.csv"
df = pd.DataFrame(pd.read_csv(file))
print(df.head(3))
"""
   PassengerId  Survived  Pclass    ...        Fare Cabin  Embarked
0            1         0       3    ...      7.2500   NaN         S
1            2         1       1    ...     71.2833   C85         C
2            3         1       3    ...      7.9250   NaN         S
[3 rows x 12 columns]
"""

1、数据集的字符处理

# 对列的处理
mapping ={
    'PassengerId': '乘客编号',
    'Survived':'是否获救',
    'Name':'姓名',
    'Pclass':'船舱等级','Sex':'性别',
    'Age':'年龄','SibSp':'兄弟姐妹数',
    'Parch':'父母小孩数','Ticket':'船票',
    'Fare':'船票费'
}
ret = df.rename(columns=mapping)
print(ret.head(3))
"""
   乘客编号  是否获救  船舱等级    ...         船票费 Cabin  Embarked
0     1     0     3    ...      7.2500   NaN         S
1     2     1     1    ...     71.2833   C85         C
2     3     1     3    ...      7.9250   NaN         S
[3 rows x 12 columns]
"""
# 对数据集里面的特定字符串进行替换
ret = df['Sex'].map({'female':'女','male':'男'})
print(ret.head(3))
"""
[3 rows x 12 columns]
0    男
1    女
2    女
Name: Sex, dtype: object
"""
# 对列的字符进行替换, 只保留数字部分
# contains,split,match,findall,endswith
df['Embarked']=df['Embarked'].replace(regex='[CS]', value='xxx')
print(df.head(3))
"""
   PassengerId  Survived  Pclass    ...        Fare Cabin  Embarked
0            1         0       3    ...      7.2500   NaN       xxx
1            2         1       1    ...     71.2833   C85       xxx
2            3         1       3    ...      7.9250   NaN       xxx
[3 rows x 12 columns]
"""

2、数据集的过滤

# 用逻辑表达式组合过滤 ==, !=
ret = df[(df['Sex']=='female')&(df['Age']>10)]
print(ret.head(3))
"""
   PassengerId  Survived  Pclass    ...        Fare Cabin  Embarked
1            2         1       1    ...     71.2833   C85       xxx
2            3         1       3    ...      7.9250   NaN       xxx
3            4         1       1    ...     53.1000  C123       xxx
[3 rows x 12 columns]
"""
# query函数
ret = df.query('Age==[10, 20]')
print(ret[["Name", "Age"]].head(3))
"""
                               Name   Age
12   Saundercock, Mr. William Henry  20.0
91       Andreasson, Mr. Paul Edvin  20.0
113         Jussila, Miss. Katriina  20.0
"""

3、数据的分类

# 用where函数
import numpy as np
ret=np.where(df['Age']>=18)
# apply函数
def convert_age(age):
    if age> 0 and age < 10:
        return "小孩"
    elif age < 30:
        return "大人"
    else:
        return "老人"
df["年龄分类"] = df['Age'].apply(convert_age)
print(df[["Name", "Age", "年龄分类"]].sample(3))
"""
                                             Name   Age 年龄分类
624                   Bowen, Mr. David John "Dai"  21.0   大人
880  Shelley, Mrs. William (Imanita Parrish Hall)  25.0   大人
471                               Cacic, Mr. Luka  38.0   老人
"""

4、 数据的切片和透视表

# groupby函数
print(df.groupby('Sex')[['Name', 'Sex']].count())
"""
 Name  Sex
Sex              
female   314  314
male     577  577
"""
# 对数据进行轴切片分析
ret = df.groupby(['Survived','Pclass'])['Age'].agg(['size','max','min','mean'])
print(ret)
"""
Survived Pclass                              
0        1         80  71.0   2.00  43.695312
         2         97  70.0  16.00  33.544444
         3        372  74.0   1.00  26.555556
1        1        136  80.0   0.92  35.368197
         2         87  62.0   0.67  25.901566
         3        119  63.0   0.42  20.646118
"""
# 数据透视表
ret = df.pivot_table(columns=['Sex'],index=['Survived','Pclass'],values='Age',
aggfunc={'Age':[np.mean,min,max]})
print(ret)
"""
                   max             mean               min       
Sex             female  male     female       male female   male
Survived Pclass                                                 
0        1        50.0  71.0  25.666667  44.581967   2.00  18.00
         2        57.0  70.0  36.000000  33.369048  24.00  16.00
         3        48.0  74.0  23.818182  27.255814   2.00   1.00
1        1        63.0  80.0  34.939024  36.248000  14.00   0.92
         2        55.0  62.0  28.080882  16.022000   2.00   0.67
         3        63.0  45.0  19.329787  22.274211   0.75   0.42
"""

相关文章
|
23天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
12天前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
20天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
53 4
|
20天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
29 2
|
22天前
|
Python
|
21天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
38 2
|
18天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
19天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
25天前
|
文字识别 自然语言处理 API
Python中的文字识别利器:pytesseract库
`pytesseract` 是一个基于 Google Tesseract-OCR 引擎的 Python 库,能够从图像中提取文字,支持多种语言,易于使用且兼容性强。本文介绍了 `pytesseract` 的安装、基本功能、高级特性和实际应用场景,帮助读者快速掌握 OCR 技术。
42 0
|
27天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
61 0