1.了解数据重构的方法

2.学会使用groupby作数据运算

什么是数据重构?
数据重构:指数据从一种格式到另一种格式的转换,包括结构转换、格式变化、类型替换等,以解决空间数据在结构、格式和类型上的统一,实现多源和异构数据的联接与融合。

合并数据集
stack

使用pandas进行数据重排时,经常用到stack和unstack两个函数。stack的意思是堆叠,堆积,unstack即“不要堆叠”。
常见的数据层次化结构有:花括号和表格。

表格在行列方向上均有索引(类似于DataFrame)。
花括号结构只有“列方向”上的索引(类似于层次化的Series)。
stack函数会将数据从”表格结构“变成”花括号结构“,即将其行索引变成列索引,反之,unstack函数将数据从”花括号结构“变成”表格结构“,即要将其中一层的列索引变成行索引。
stack:stack函数会将数据从”表格结构“变成”花括号结构“ ,将列索引转为行索引,完成层级索引
unstack:unstack函数将数据从”花括号结构“变成”表格结构“,层级索引展开 ,默认操作内层索引

df_obj = pd.DataFrame(np.random.randint(0,10, (5,2)), columns=['data1', 'data2'])
df_obj

stacked = df_obj.stack()
print(stacked)
stackedd=stacked.unstack()
print(stacked)

代码结果如下所示·:

concat

Pandas中的pd.concat与np.concatenate类似,但可选参数更多,功能更为强大。

pd.concat可以简单地合并一维的对象:

ser1 = pd.Series(['A', 'B', 'C'], index=[1, 2, 3])
ser2 = pd.Series(['D', 'E', 'F'], index=[4, 5, 6])
pd.concat([ser1, ser2])

多维数据合并:

df1 = make_df('AB', [1, 2])
df2 = make_df('AB', [3, 4])
display('df1', 'df2', 'pd.concat([df1, df2])')

numpy中concatenate和pd.concat的很像。
他俩的主要差异就在于pd.concat在合并时会保留索引,即使索引是重复的。但是pandas中也提供了检查重复索引和忽略索引的参数,见上表。
【代码实现】

#构造一个函数,方便后面表示
x = make_df('AB', [0, 1])
y = make_df('AB', [2, 3])
y.index = x.index # 复制索引
display('x', 'y', 'pd.concat([x, y])')
#捕捉索引重复
try:pd.concat([x, y], verify_integrity=True)
except ValueError as e:print("ValueError:", e)
#忽略索引
display('x', 'y', 'pd.concat([x, y], ignore_index=True)')
#增加多级索引
display('x', 'y', "pd.concat([x, y], keys=['x', 'y'])")

join

通过索引或者指定的列连接两个DataFrame,通过一个list可以一次高效的连接多个DataFrame。

DataFrame.join(other, on=None, how=’left’, lsuffix=”, rsuffix=”, sort=False)

小结:
DataFrame的join默认为左连接
DataFrame的join连接时,caller的关键列默认为index,可以使用参数on指定别的列为关键列,但是other的关键列永远都是index,所有使用别的列为关键列是,常常使用set_index()

append

append是series和dataframe的方法,使用它就是默认沿着列进行凭借(axis = 0,列对齐)

DataFrame.append(*other*, *ignore_index=False*, *verify_integrity=False*, *sort=None*)

merge

pd.merge()函数可实现可实现三种数据连接:一对一、多对一和多对多。
一对一连接

df1 = pd.DataFrame({'employee': ['Bob', 'Jake', 'Lisa', 'Sue'],'group': ['Accounting', 'Engineering', 'Engineering', 'HR']})
df2 = pd.DataFrame({'employee': ['Lisa', 'Bob', 'Jake', 'Sue'],'hire_date': [2004, 2008, 2012, 2014]})
display('df1', 'df2')
df3 = pd.merge(df1, df2)
df3

多对一连接

df4 = pd.DataFrame({'group': ['Accounting', 'Engineering', 'HR'],'supervisor': ['Carly', 'Guido', 'Steve']})
display('df3', 'df4', 'pd.merge(df3, df4)')

多对多连接

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting','Engineering', 'Engineering', 'HR', 'HR'],'skills': ['math', 'spreadsheets', 'coding', 'linux','spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")

实战部分:

#导入数据
import numpy as np
import pandas as pd
# 载入data文件中的:train-left-up.csv
df=pd.read_csv(r'.\data\train-left-up.csv')
df.head()

数据的合并

任务一:将data文件夹里面的所有数据都载入,观察数据的之间的关系

text_left_up = pd.read_csv("data/train-left-up.csv")
text_left_down = pd.read_csv("data/train-left-down.csv")
text_right_up = pd.read_csv("data/train-right-up.csv")
text_right_down = pd.read_csv("data/train-right-down.csv")

任务二:使用concat方法:将数据train-left-up.csv和train-right-up.csv横向合并为一张表,并保存这张表为result_up

list_up = [text_left_up,text_right_up]
result_up = pd.concat(list_up,axis=1)
result_up.head()

任务三:使用concat方法:将train-left-down和train-right-down横向合并为一张表,并保存这张表为result_down。然后将上边的result_up和result_down纵向合并为result。

list_down=[text_left_down,text_right_down]
result_down = pd.concat(list_down,axis=1)
result = pd.concat([result_up,result_down])
result.head()

任务四:使用DataFrame自带的方法join方法和append:完成任务二和任务三的任务

resul_up = text_left_up.join(text_right_up)
result_down = text_left_down.join(text_right_down)
result = result_up.append(result_down)
result.head()

任务五:使用Panads的merge方法和DataFrame的append方法:完成任务二和任务三的任务

result_up = pd.merge(text_left_up,text_right_up,left_index=True,right_index=True)
result_down = pd.merge(text_left_down,text_right_down,left_index=True,right_index=True)
result = resul_up.append(result_down)
result.head()

任务六:完成的数据保存为result.csv

result.to_csv('result.csv')

任务七:将我们的数据变为Series类型的数据

unit_result=text.stack().head(20)

groupby

groupby()用法:
根据DataFrame本身的某一列或多列内容进行分组聚合

若按某一列聚合,则新DataFrame将根据某一列的内容分为不同的维度进行拆解,同时将同一维度的再进行聚合。
    若按某多列聚合,则新DataFrame将是多列之间维度的笛卡尔积,例如:“key1”列,有a和b两个维度,而“key2”有one和two两个维度,则按“key1”列和“key2”聚合之后,新DataFrame将有四个group;

注意:groupby默认是在axis=0上进行分组的,通过设置axis=1,也可以在其他任何轴上进行分组。
任务一:计算泰坦尼克号男性与女性的平均票价

df  = text['Fare'].groupby(text['Sex'])
means = df.mean()
means

任务二:统计泰坦尼克号中男女的存活人数

survived_sex = text['Survived'].groupby(text['Sex']).sum()
survived_sex.head()

任务三:计算客舱不同等级的存活人数

survived_pclass = text['Survived'].groupby(text['Pclass'])
survived_pclass.sum()

任务四:统计在不同等级的票中的不同年龄的船票花费的平均值

text.groupby(['Pclass','Age'])['Fare'].mean().head()

任务五:将任务二和任务三的数据合并

result = pd.merge(means,survived_sex,on='Sex')
result

任务六:得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数) 

#不同年龄的存活人数
survived_age = text['Survived'].groupby(text['Age']).sum()
survived_age.head()#找出最大值的年龄段
survived_age[survived_age.values==survived_age.max()]_sum = text['Survived'].sum()
print(_sum)#首先计算总人数
_sum = text['Survived'].sum()
print("sum of person:"+str(_sum))
precetn =survived_age.max()/_sum
print("最大存活率:"+str(precetn))

第二章:02数据重构相关推荐

  1. ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出...

    ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出 前言:首先给大家说声"对不起",因为自从打算写这系列的文章以来,得到大家很多的支持 ...

  2. 运用计算机辅助电话调查的方法,第二章 统计数据的搜集、整理与显示

    "对统计学家来说,当今是统计学一切最重要活动的最重要的时期." "在花费同样的时间和劳动下,完整细致地检查数据的收集过程,或者说试验过程,常常会增加10倍或12倍的收益. ...

  3. 考研 | 组成原理【第二章】数据的表示和运算

    考研 | 组成原理[第二章]数据的表示和运算 文章目录 考研 | 组成原理[第二章]数据的表示和运算 I. 数制与编码 a. 进位计数制及其相互转换 b. BCD码 1. 8421码 2. 余3码 3 ...

  4. 计算机组成原理笔记(王道考研) 第二章:数据的表示和运算1

    内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记. 感谢LY,他帮我做了一部分笔记.由于听的时间不一样,第四章前的内容看起来可能稍显啰嗦,后面会记得简略一些. 西电的计算机组织与体系 ...

  5. 计算机组成原理笔记(王道考研) 第二章:数据的表示和运算2

    内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记. 感谢LY,他帮我做了一部分笔记.由于听的时间不一样,第四章前的内容看起来可能稍显啰嗦,后面会记得简略一些. 西电的计算机组织与体系 ...

  6. 第二章 MATLAB数据与矩阵

    第二章 MATLAB 数据与矩阵 文章目录 第二章 MATLAB 数据与矩阵 2.1 MATLAB数据类型 2.2 变量和数据操作 2.2.1 变量与赋值 2.2.2 预定义变量 2.2.3 MATL ...

  7. 数据挖掘第二章 认识数据

    数据挖掘第二章 认识数据 认识数据 2.1 数据对象与属性类型 2.2 数据的基本统计描述 2.2.1 中心趋势度量:均值.中位数和众数 2.2.2 度量数据散步:极差.四分位数.方差.标准差和四分位 ...

  8. 《数据密集型计算和模型》第二章大数据时代的计算机体系结构复习

    <数据密集型计算和模型>第二章的有关内容.主要复习内容为:计算部件.存储部件.网络部件.软件定义部件.虚拟资源管理系统等. 文章目录 大数据时代的计算机体系结构 一.计算部件 1. 多核和 ...

  9. 第二章 大数据操作系统

    本章将重点展示Hadoop作为大数据操作系统的一面,通过分布式文件系统(HDFS)和负载和资源管理器(YARN)来概述Hadoop的原理.另外还会演示如何使用命令行与HDFS进行交互,并执行一个Map ...

最新文章

  1. mysql查看使用的索引_Mysql查看是否使用到索引
  2. 如何不让右下角出现“windows安全报警”
  3. python 求和为正整数n的连续整数序列
  4. 大学基础课程之重要性
  5. 混合APP开发框架资料汇总
  6. 自定义语言的实现——解释器模式
  7. aptana studio 汉化与安装 zencoding、spket 配置
  8. c语言逗号占几个字符,C语言 scanf输入多个数字只能以逗号分隔的操作
  9. vue 左侧菜单隐藏_vue.js 左侧二级菜单显示与隐藏切换的实例代码
  10. Zclip:复制页面内容到剪贴板兼容各浏览器
  11. 小贾漫谈——Java反射
  12. zynq 和fpga区别_FPGA复位的正确打开方式
  13. 在混合开发框架模式中,简化客户端对Web API的频繁调用
  14. 说下我常用的几个精简版系统的感受
  15. 目标追踪笔记---帧差法
  16. Arduino零基础入门
  17. python自动化之淘宝自动清空购物车
  18. Word插入Latex公式的几种方式(TeXsWord、EqualX、Aurora等工具)
  19. python中文版下载安装-python
  20. WPS---EXCEL(十一)---将插入数据转化成柱状图

热门文章

  1. 数据结构与算法基础(java版)
  2. 所有都是信息?——信息简史
  3. C# 平方、开方、保留小数 运算
  4. 为什么苹果内购总是失败_苹果内购审核那些被拒的原因
  5. 【Qt Quick聊天软件练习】二、登录界面搭建
  6. HTML5常用基础标签
  7. 星淘惠:跨境电商产业实现数字化转型促进经济发展
  8. Spring(AOP)
  9. 前端:页面快速定位和返回顶部(锚点)
  10. 考试的判卷系统-上机考试卷批阅系统.h