note
- 数据的合并:df自带的
join
方法是横向合并,append
方法是纵向(上下)合并拼接;pd
的merge
方法是横向合并,然后用刚才的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
查看评论