目录
- 1 数据的合并
- 1.1合并方法一:用`concat`函数
- 1.2 合并方法二:使用DataFrame自带的方法`join`方法和`append`
- 1.3 合并方法三:使用Panads的`merge`方法和DataFrame的`append`方法
- 2 换一种角度看数据
- 3 数据聚合与运算
- 3.1 groupby机制
- 3.2 数据运算
1 数据的合并
- 首先将所有文件都载入
import numpy as np import pandas as pd 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")
1.1合并方法一:用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()
# 将train-left-down和train-right-down横向合并为一张表,并保存这张表为result_down。 list_down=[text_left_down,text_right_down] result_down = pd.concat(list_down,axis=1) # 将上边的result_up和result_down纵向合并为result。 result = pd.concat([result_up,result_down]) result.head()
1.2 合并方法二:使用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()
1.3 合并方法三:使用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()
-
合并方法:
- 堆叠合并:堆叠合并就是简单的把两个表拼在一起
- 横向堆叠(
concat
):axis=1
将后一个表的数据堆叠到前一个表的后几列 - 纵向堆叠(
join
,appendt
):t(axis=0)
指将后一个表的数据堆叠到前一个表的下几行
- 横向堆叠(
- 主键合并:指前后两个表按照一个或者多个键匹配的方式连接起来,一般是以某一或多列为键,匹配其他列,很类似 SQL 中的 join。
merge
函数和join
函数都可以实现主键合并merge
:不仅可以实现 SQL 中的 join 函数的全部功能,还可以在匹配的过程中对数据进行排序,通过其中的 sort 参数实现。join
:与 merge 函数 不同之处在于,join 函数要求两个主键的名称必须相同。
- 重叠合并:数据处理的过程中会出现同样一份数据存储在两张表中,哪一张的数据都不算全,但是如果将其中一个表的数据补充进另外一个表中,生成的这张新表则是相对完整的数据。这种方法就叫重叠合并
combine_first
函数
参考文章
- 堆叠合并:堆叠合并就是简单的把两个表拼在一起
-
分别介绍:
concat
函数:objs
:参与连接的列表或字典,且列表或字典里的对象是pandas数据类型,唯一必须给定的参数axis
:指明连接的轴向,0是纵轴(上下合并),1是横轴,默认是0join
:指明轴向索引的索引是交集还是并集,‘inner’(交集),‘outer’(并集),默认是‘outer’
注意:concat不会去重,要达到去重的效果可以使用drop_duplicates方法
join
函数:- 参数意义基本和
merge
函数相同,只是join
默认左外连接
- 参数意义基本和
merge
函数:根据两组数据中的关键字key来合并(key在两组数据中是完全一致的)。how
:连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’on
:用于连接的列名,必须同时存在于左右两个DataFrame对象中left_index
:使用左则DataFrame中的行索引做为连接键right_index
:使用右则DataFrame中的行索引做为连接键
append
函数:append只有纵向合并,没有横向合并
注意:
1 join方法默认为左外连接how=left。
2 concat默认的是外连接(outer join)
3 merge默认的是内连接(inner join)
2 换一种角度看数据
-
将数据变为Series类型的数据
# 将完整的数据加载出来 text = pd.read_csv('result.csv') text.head() # 代码写在这里 unit_result=text.stack().head(20) unit_result.head()
#将代码保存为unit_result.csv unit_result.to_csv('unit_result.csv') test = pd.read_csv('unit_result.csv') test.head()
-
stack
函数:堆叠数组
参考
3 数据聚合与运算
3.1 groupby机制
groupby
函数:数据的分组和分组运算- 格式:
df[].groupby([df[属性],df[属性]).mean()
df[]
:(指输出数据的结果属性名称)df[属性]
:(指分类的属性,数据的限定定语,可以有多个)mean()
:(对于数据的计算方式——函数名称)
3.2 数据运算
-
任务二:计算泰坦尼克号男性与女性的平均票价
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()
思考:从上面的数据可以看出,男性平均票价约是女性的两倍,女性存活的人数约是男性的两倍,并不是客舱等级越高存活人数越多,三等略低于一等舱存活数,二等舱存活人数最少。
-
agg()
函数:agg
函数通常用于调用groupby()
函数之后,对数据做一些聚合操作,包括sum,min,max以及其他一些聚合函数 -
任务五:统计在不同等级的票中的不同年龄的船票花费的平均值
text.groupby(['Pclass','Age'])['Fare'].mean().head()
-
任务六:将任务二和任务三的数据合并,并保存到sex_fare_survived.csv
result = pd.merge(means,survived_sex,on='Sex') result result.to_csv('sex_fare_survived.csv')
-
任务七:得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数)
#不同年龄的存活人数 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) # 342
#首先计算总人数 _sum = text['Survived'].sum() print("sum of person:"+str(_sum)) precetn =survived_age.max()/_sum print("最大存活率:"+str(precetn)) ''' sum of person:342 最大存活率:0.043859649122807015 '''