一、数据的合并
常见的合并方法1有 concat、append、merge、join
原始数据如下:
1.1 concat() 合并表
-
train-left-up 与 train-right-up 合并为 result_up
# 参数:合并列表,表轴 list_up = [text_left_up,text_right_up] result_up = pd.concat(list_up, axis=1)
-
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:
result = pd.concat([result_up,result_down])
1.2 使用DataFrame.join()和DataFrame.append()
# 合并上表
result_up = text_left_up.join(text_right_up)
# 合并下表
result_down = text_left_down.join(text_right_down)
# 上下合并
result = result_up.append(result_down)
1.3 使用 pandas.merge() 和 pandas.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 = result_up.append(result_down)
保存数据:result.to_csv('result.csv')
contact | append | join | merge |
---|---|---|---|
拼接 | 拼接 | 关联 | 关联 |
只能横向(axis=0)合并 | 纵向横向都可以合并 | 仅能在索引上关联 | 可实现列与索引的关联 |
- 关联操作基本上用 merge1
二、使用Series类型的数据
text = pd.read_csv('result.csv')
text.head()
unit_result = text.stack().head(20)
unit_result.head()
pandas里面利用stack(堆叠)和unstack(不堆叠)函数进行数据重排。数据的层次化结构有两种2:DataFrame的表格、Series的层级结构。那么:
- stack:表格→层级,行索引变列索引
- unstack:层级→表格,列索引变行索引
三、数据的聚合与运算
使用result.csv的数据:
GroupBy机制
GroupBy3,顾名思义,就是通过某一列进行分组,即其参数——“分组键”。每次分组后产生一个新的Series,也可传入多个分组键,类型可不同,产生一个层次化的Series。
1. 计算泰坦尼克号男性与女性的平均票价
2. 计算男女存活人数
3. 计算不同客舱等级的存活人数
通过以上计算,可以看出:
- 女性平均票价高于男性平均票价
- 女性存活人数高于男性存活人数
- 等级最高的一等舱存活人数最多
4. 统计不同等级票中不同年龄的船票平均值
5. 合并性别、船票费用、存活人数数据
result = pd.merge(means, survived_sex, on='Sex')
result.to_csv('sex_fare_survived.csv')
6. 计算最高的存活率
思路:不同年龄的总存活人数→存活人数最大的年龄→最高存活率(= 最大年龄段存活人数 / 总存活人数)
#不同年龄的存活人数
survived_age = text['Survived'].groupby(text['Age']).sum()
#找出最大值的年龄
survived_age[survived_age.values==survived_age.max()]
# 计算总存活人数
_sum = text['Survived'].sum()
print("sum of person:"+str(_sum))
precetn =survived_age.max()/_sum
print("最大存活率:"+str(precetn))
从结果上看,24岁存活人数最多,其存活率约为4.39%