“动手学数据分析”小组学习的Task03-学习日志

文章目录


前言

<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
上一篇:ts枚举学习笔记


下一篇:如何使用 “自定义镜像” 创建容器服务 Kubernetes 集群