前言
本次学习作为数据重构部分的相关记录。
一、数据的合并
使用concat
方法将数据train-left-up.csv
和train-right-up.csv
横向合并为一张表,并保存这张表为result_up
。
result_up = pd.concat([df_leftup, df_rightup], axis=1)
result_up.head()
concat
方法可以实现不关心按照哪个键来连接,直接纵向连接(axis=1
)或者横向连接(axis=0
)。
除此之外,连接还可以使用用join方法实现按照索引连接。之后使用append可以将两组数据表拼在一起。
result_up = df_leftup.join(df_rightup)
result_down = df_leftdown.join(df_rightdown,how='left') # 默认就位left还有right 与outer.
result = result_down.append(result_up, ignore_index=True) # ignore_index=TRUE代表忽略result_up的索引,
result.shape # 如果原表是默认整数序列的索引,那么可以使用 ignore_index=True 对新序列对应的索引自动标号否则必须对 Series 指定 name 属性。
也可以使用merge和append来实现。merge是值连接。不过在这里left_index和right_index指明使用的是索引的值作为键,就和join一样了。
result_down = df_leftdown.merge(df_rightdown, left_index=True, right_index=True)
result_up = df_leftup.merge(df_rightup, left_index=True, right_index=True)
result = result_up.append(result_down) # ignore_index才会自动编号
二、数据聚合与运算
这里主要用到了groupby
实现分组计算。通过几个例子进行学习。
计算泰坦尼克号男性与女性的平均票价
# 分组依据是:性别;分组来源是 票价; 执行的操作是 求平均
df.groupby('Sex')['Fare'].mean()
统计泰坦尼克号中男女的存活人数
df.groupby('Sex')['Survived'].sum() # 因为1代表存活,所以用sum就可以直接实现统计存活
统计在不同等级的票中的不同年龄的船票花费的平均值
df.groupby(['Pclass','Age'])['Fare'].mean()
得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数)
df.groupby('Age')['Survived'].sum()
age_num = df.groupby('Age')['Survived'].sum()
age_num[age_num.values == age_num.max()] # 取行
age_num.max() / df['Survived'].sum()
这里要用df['Survived'].sum()
来求存活总人数。因为有些人的年龄是NaN
值,如果统计按年龄分组后的存活人数的和,那么在groupby('age')
时没有考虑这些值,所以会造成数据缺失。
df.groupby('Age')['Survived'].sum().sum() # 290
df['Survived'].sum() # 342
总结
本次学习了解了数据重构,仍然是数据理解部分。主要包括数据的合并,用concat
,join
,merge
等连接操作来实现;还有数据的聚合分组,主要是用groupby
实现分组以后,在每个组内进行相关特征计算。需要注意的是分组时会舍弃那些分组依据为空值的数据,所以如果需要统计原表的特征比如sum
之类的,要在原表进行操作。