【使用pandas进行数据分析】数据重构——合并与聚合、运算

在数据清洗之后,我们可以将不同表中的数据进行合并,再进行分析。

那么,数据表如何进行合并?

首先,我们可以利用concat语句:

import numpy as np
import pandas as pd
df=pd.read_csv('train-left-up.csv')
df.head()

df_left_up=pd.read_csv('train-left-up.csv')
df_left_down=pd.read_csv('train-left-down.csv')
df_right_up=pd.read_csv('train-right-up.csv')
df_right_down=pd.read_csv('train-right-down.csv')

#现在已经将所需要合并的所有表导入,接下来可以 查看&合并
df_left_up.head() #查看

list_up=[df_left_up,df_right_up]
result_up=pd.concat(list_up,axis=1) #使用concat合并
result_up.head() #查看合并

#下面合并down的部分
list_down=[df_left_down,df_right_down]
result_down=pd.concat(list_down,axis=1)

#最后把上下合并,连成一张表
result=pd.concat([result_up,result_down])
result.to_csv('result.csv')

result_up.to_csv('result.csv') #保存





这里,合并表还有另一种方法,即用join&append合并

result_up=df_left_up.join(df_right_up) #合并上
result_down=df_left_down.join(df_right_down) #合并下

result=result_up.append(result_down) #合并上下 append:增补
result.head() #查看

有了完整的表后,我们可以对数据进行运算

df=pd.read_csv('result.csv') #读取表
df.head()

means=df['Fare'].groupby(df['Sex']).mean() #按性别分组求平均票价
means.head()

survived_sex=df['Survived'].groupby(df['Sex']).sum() #按性别分组求存活人数
survived_sex.head()

survived_pclass=df['Survived'].groupby(df['Pclass']).sum() #按等级分组求存活人数
survived_pclass.head()

#返回查看表中survived是用0,1表示的,故可以用sum求和
 
fare_mean=df['Fare'].groupby(df['Pclass']).mean()  #按不同等级分组求花费的平均值
fare_mean.head()

下面看多条件分组
fare_mean=df['Fare'].groupby([df['Pclass'],df['Age']]).mean()
#按不同等级、不同年龄分组求花费的平均值
fare_mean.head()

result=pd.merge(means,survived_sex,on='Sex') #合并数据
result.head()

result.to_csv('sex_fare-survived.csv') #保存结果

之后,可以进行稍微复杂的运算,即求最大值,并由最大值所在样本求占总样本的百分比

survived_age=df['Survived'].groupby(df['Age']).sum() #按年龄分组求存活人数
survived_age.head()


survived_age[survived_age.values==survived_age.max()] #找到年龄最大的组
survived_age.head()


_sum=df['Survived'].sum()   #求比例,先求总样本量
print('总的存活人数:'+str(_sum))   #利用print('描述性文字:'+str( ))使数据可视化

precetn=survived_age.max()/_sum  #比例为年龄最大的分组样本数和总样本之比
print('最大存货率:'+str(precetn)) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值