飞道的博客

【数据分析】(task3)数据重构

294人阅读  评论(0)

note

  • 数据的合并:df自带的join方法是横向合并,append方法是纵向(上下)合并拼接;pdmerge方法是横向合并,然后用刚才的apend进行纵向合并。
  • 数据的重构:stack函数的主要作用是将原来的列转成最内层的行索引,转换之后都是多层次索引。stack可以改变data层次化结构,变成”花括号“结构(如下面的第二种,将行索引变成列索引,而unstack函数则相反)。

一、数据的合并

# 1. 将数据train-left-up.csv和train-right-up.csv横向合并为一张表result_up
list_up = [text_left_up,text_right_up]
# axis是进行横向的合并
result_up = pd.concat(list_up,axis=1)

# 2. 将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])

(1)3这里df自带的join方法是横向合并,append方法是纵向(上下)合并拼接。
(2)4这里pd的merge方法是横向合并,然后用刚才的apend进行纵向合并。

# 3. 使用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)

# 4. 使用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.to_csv('result.csv')

二、使用stack换种角度看数据

stack函数的主要作用是将原来的列转成最内层的行索引,转换之后都是多层次索引。stack可以改变data层次化结构,变成”花括号“结构(如下面的第二种,将列属性变成行索引,而unstack函数则相反)。

列属性变成行索引:

2.1 对单层df进行stack操作

对单层的df进行stack操作后会变成Series型结构。

text = pd.read_csv('result.csv')
text.head()
unit_result=text.stack().head(20)
type(unit_result)  # pandas.core.series.Series
unit_result.head()

# 将我们的数据变为Series类型的数据
unit_result=text.stack().head(20)

# 栗子2:stack改变data层次化结构(花括号)
import numpy as np
import pandas as pd
#创建DataFrame
data = pd.DataFrame(np.arange(4).reshape((2, 2)),
index=pd.Index(['row1', 'row2'], name='rows'),
columns=pd.Index(['one', 'two'], name='cols'))
print(data)
# cols one two
# rows 
# row1 0 1
# row2 2 3

#使用stack()函数改变data层次化结构
result = data.stack()
print('data改变成"花括号"结构','\n',result)
# data改变成"花括号"结构 
# rows cols
# row1 one 0
#      two 1
# row2 one 2
#      two 3

 

2.2 对多层df进行stack操作

import pandas as pd
# 多层次索引作为列属性
col = pd.MultiIndex.from_tuples([('information', 'sex'),
                                 ('information', 'weight')])
# 模拟出一份多层次列属性的数据
df3 = pd.DataFrame([["男", 178], ["女", 166]],
                   index = ["小郭", "小刘"],
                   columns = col) # 多层次列属性
df3


三、数据运用

# groupby数据聚合

# 1. 男女性的平均票价
df  = text['Fare'].groupby(text['Sex'])
means = df.mean()


其实和平时sql的groupby的分组都类似,如按照性别进行分组后统计每组的存活人数(存活这个字段需要先指定)。

# 2. 男女性的存活人数(存活一列 如果活着是1 否则为0)
survived_sex = text['Survived'].groupby(text['Sex']).sum()

# 3. 计算客舱不同等级的存活人数
survived_pclass = text['Survived'].groupby(text['Pclass'])
survived_pclass.sum()

# 4. 统计在不同等级的票中的不同年龄的船票花费的平均值
text.groupby(['Pclass','Age'])['Fare'].mean().head()

# 5. 不同年龄的存活人数
survived_age = text['Survived'].groupby(text['Age']).sum()

时间安排

任务 任务内容 时间 完成情况
- 1月16日周一开始
Task01: 数据加载及探索性数据分析(第一章第1,2,3节)(2天) 16-17日周二 完成
Task02: 数据清洗及特征处理(第二章第1节)(2天) 18-19日周四 完成
Task03: 数据重构(第二章第2,3节)(2天) 20-21日周六 完成
Task04: 数据可视化(第二章第4节)(2天) 22-23日周一
Task05: 数据建模及模型评估(第三章第1,2节)(3天) 24-26日周四

Reference

[1] https://github.com/datawhalechina/hands-on-data-analysis
[2] pandas重塑层次化索引(stack()和unstack()函数解析)
[3] 图解pandas的轴旋转函数:stack和unstack


转载:https://blog.csdn.net/qq_35812205/article/details/128680133
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场