文章目录
前言
<font color=#999AAA 本文章为天池“动手学数据分析”小组学习的Task03-学习日志,旨在了解数据重构基本步骤及相关python处理。
学习网址添加链接描述:添加链接描述
一、数据合并
1.导入数据
代码如下
text_left_up = pd.read_csv(os.path.join(path,"train-left-up.csv"))
text_left_down = pd.read_csv(os.path.join(path,"train-left-down.csv"))
text_right_up = pd.read_csv(os.path.join(path,'train-right-up.csv'))
text_right_down = pd.read_csv(os.path.join(path,'train-right-down.csv'))
print(text_left_up.head(5))
print(text_left_down.head(6))
print(text_right_up.head(7))
print(text_right_down.head(8))
从结果来看,这四份数据是将原来泰坦尼克数据通过中心数据四等分。
2.数据合并:方法一——通过concat
先分别缝合上部的数据和下部分数据,代码如下:
list_up=[text_left_up,text_right_up]
train_up=pd.concat(list_up,axis=1)
list_down=[text_left_down,text_right_down]
train_down=pd.concat(list_down,axis=1)
train_join1=pd.concat([train_up,train_down])
print(train_join1.head(4))
结果如下:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
知识补充:
函数:pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True)
参数:
^objs:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。
^axis:{0,1,…},默认为0。沿着连接的轴。
^join:{‘inner’,‘outer’},默认为“outer”。如何处理其他轴上的索引。outer为联合和inner为交集。
^ignore_index:boolean,default False。如果为True,请不要使用并置轴上的索引值。结果轴将被标记为0,…,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。注意,其他轴上的索引值在连接中仍然受到尊重。
^join_axes:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。
^keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
^levels:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
^names:list,default无。结果层次索引中的级别的名称。
^verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。
^copy:boolean,default True。如果为False,请勿不必要地复制数据。
3.数据合并:方法二——通过join&append
先分别缝合上部的数据和下部分数据,代码如下:
list_up1=text_left_up.join(text_right_up)
list_down1=text_left_down.join(text_right_down)
train_join2=list_up1.append(list_down1)
print(train_join2.head(5))
4.数据合并:方法三——通过merge&append
先分别缝合上部的数据和下部分数据,代码如下:
list_up2=pd.merge(text_left_up,text_right_up,left_index=True,right_index=True)
list_down2=pd.merge(text_left_down,text_right_down,left_index=True,right_index=True)
train_join3=list_up2.append(list_down2)
print(train_join3.head(6))
5.merge、join以及concat三种方法比较
^merge :
与sql 的join类似,有left join ,right join ,outer join , 连接字段可以是索引可以是一个列
^join :
连接字段是索引,或者两个连接字段的列名一样。 其他 与merge 相同
^concat :
pandas 的内置的函数,有一种是类似于 sql 的union all,其余与pd.merge 相同
6.将数据变为Series类型的数据
代码如下:
unit_result=train_join1.stack().head(20)
print(unit_result.head(4))
注:在用pandas进行数据重排时,经常用到stack和unstack两个函数。stack的意思是堆叠,堆积,unstack即“不要堆叠”。
二、数据聚合与运算
1.GroupBy机制:
第一步,数据包含在pandas对象中,可以是Series、DataFrame或其他数据结构
第二步,根据你提供的一个或多个键分离到各个组中
注:分离操作是在数据对象的特定轴向上进行的。例如,DataFrame可以在它的行方向(axis=0)或列方向(axis=1)进行分组
第三步,函数就应用到各个组中,产生新的值
第四步,所有函数的应用结果联合为一个结果对象
2.操作实例
2.1.计算男性与女性的平均票价
代码如下:
A=train_join1['Fare'].groupby(train_join1['Sex'])
mean_A=A.mean()
print(mean_A)
结果如下:
Sex
female 44.479818
male 25.523893
Name: Fare, dtype: float64
2.2.计算男女的存活人数
代码如下:
B=train_join1['Survived'].groupby(train_join1['Sex']).sum()
print(B)
结果如下:
Sex
female 233
male 109
Name: Survived, dtype: int64
2.3.客舱不同等级的存活人数
代码如下:
C=train_join1['Survived'].groupby(train_join1['Pclass']).sum()
print(C)
结果如下:
Pclass
1 136
2 87
3 119
Name: Survived, dtype: int64
2.4.计算不同等级的票中的不同年龄的船票花费的平均值(两个分类)
代码如下:
D=train_join1.groupby(['Pclass','Age'])['Fare'].mean()
print(D)
结果如下:
Pclass Age
1 0.92 151.5500
2.00 151.5500
4.00 81.8583
11.00 120.0000
14.00 120.0000
...
3 61.00 6.2375
63.00 9.5875
65.00 7.7500
70.50 7.7500
74.00 7.7750
Name: Fare, Length: 182, dtype: float64
Fare Survived
将2.1与2.2数据合并,代码如下:
result=pd.merge(mean_A,B,on='Sex')
print(result)
2.5.计算得出不同年龄的总的存活人数,然后找出存活人数的最高的年年龄
代码如下:
E=train_join1['Survived'].groupby(train_join1['Age']).sum()
print(E[E.values==E.max()])
结果如下:
Sex
female 44.479818 233
male 25.523893 109
Age
24.0 15
Name: Survived, dtype: int64