动手学数据分析(3)--数据重构

1.数据的合并

1.1 导入基本库

import numpy as np
import pandas as pd

1.2载入数据

#将data文件夹里面的所有数据都载入,与之前的原始数据相比,观察他们的之间的关系
text_left_up = pd.read_csv("train-left-up.csv")
text_left_down = pd.read_csv("train-left-down.csv")
text_right_up = pd.read_csv("train-right-up.csv")
text_right_down = pd.read_csv("train-right-down.csv")
text = pd.read_csv('train.csv')

#四个数据就是整体的数据被按照左上、左下、右上、右下分成四块。

1.3将数据合并

# 法一:使用concat方法:将数据train-left-up.csv和train-right-up.csv横向合并为一张表,并 # 保存这张表为result_up使用concat方法:将train-left-down和train-right-down横向合并为一张 # 表,并保存这张表为result_down。然后将上边的result_up和result_down纵向合并为result。
list_up = [text_left_up,text_right_up]
result_up = pd.concat(list_up,axis=1)

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

result = pd.concat([result_up,result_down])



#法二: 使用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)


#法三: 使用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)
【思考】1.对比merge、join以及concat的方法的不同以及相同。
2.思考一下在任务四和任务五的情况下,为什么都要求使用DataFrame的append方法,
3.如何只要求使用merge或者join可不可以完成任务四和任务五呢?

merge函数
参数 说明
left 拼接的左侧DataFrame对象
right 拼接的右侧DataFrame对象
on

要加入的列或索引级别名称。

必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。

left_on 左侧DataFrame中的列(索引级别)用作键。 (列名,索引级名称,长度等于DataFrame长度的数组。)
right_on 同上
left_index left_index=True,则使用行标签作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
right_index 同上
how

(left, right, outer, inner). 默认inner。

  inner是取交集,outer取并集。

sort

:按字典顺序通过连接键对结果DataFrame进行排序。

默认为True,设置为False将在很多情况下显着提高性能

copy 始终从传递的DataFrame对象复制数据(默认为True)
join函数
参数 说明

how

用来指定表合并后保留数据的规则(同merge)
on 要加入的列或索引级别名称。

suffix

如果和表合并的过程中遇到有一列两个表都同名,但是值不同,合并的时候又都想保留下来,就可以用suffixes给每个表的重复列名增加后缀
conbat函数

objs

series,dataframe或者是panel构成的序列lsit 
axis 需要合并链接的轴,0是lie,1是hang,默认axis=0
join 连接的方式 inner,或者outer
merge 横向拼接,数据库样式的链接合并,可以指定链接的键
join 横向拼接
conbat 横纵都可以

2.因为使用append才可以进行纵向的拼接(可追加行)。

3.只有merge,join不行,因为两者都是横向拼接。

2.换种角度看数据

2.1 将数据变为Series类型数据

#这个stack函数是干什么的?
#将数据从表格结构变成花括号结构,即将其行索引变成列索引

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

3.数据的聚合与运算

3.1 groupby() 用法

#根据DataFrame本身的某一列或多列内容进行分组聚合
survived_sex = text['Survived'].groupby(text['Sex']).sum()

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

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

3.2 agg()函数用法。

text.groupby('Sex').agg({'Fare': 'mean', 'Pclass': 'count'}).rename(columns=                                                                
                         {'Fare': 'mean_fare', 'Pclass': 'count_pclass'})

上一篇:Rabbitmq 简单示例


下一篇:nginx 基础 应用实战