Python数据分析之数据重构



二、数据重构

🚩 2.4 数据的合并

  • 首先导入 data 文件夹里的文件
import numpy as np
import pandas as pd、
dflp = pd.read_csv('./data/train-left-up.csv')
dfrp = pd.read_csv('./data/train-right-up.csv')
dfld = pd.read_csv('./data/train-left-down.csv')
dfrd = pd.read_csv('./data/train-right-down.csv')

2.4.1 Concat 的使用

  • 将数据train-left-up.csv和train-right-up.csv横向合并为一张表,并保存这张表为result_up
  • 将train-left-down.csv和train-right-down.csv横向合并为一张表,并保存这张表为result_down。
result_up = pd.concat([dflp, dfrp], axis = 1)
result_down = pd.concat([dfld, dfrd], axis = 1)
  • 将上边的result_up和result_down纵向合并为result。
result = pd.concat([result_up, result_down])

2.4.2 join和append

  • 使用DataFrame自带的方法join方法和append完成上面的合并
# join 用于左右拼接
result1_up = dflp.join(dfrp)
result1_down = dfld.join(dfrd)

# append 用于上下拼接
result1 = result1_up.append(result1_down)

2.4.3 merge

  • 使用Panads的merge方法和DataFrame的append方法完成上面的合并
# merge 只能用于左右表拼接
Result_up = pd.merge(dflp, dfrp, left_index=True,right_index=True)
Result_down = pd.merge(dfld, dfrd, left_index=True,right_index=True)

# append 用于上下拼接
Result = Result_up.append(Result_down)

💡 pd.merge()参数比较多,用法比较灵活,这边给出官方文档和解析:
pd.merge() 官方文档

DataFrame.merge(right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(’_x’, ‘_y’), copy=True, indicator=False, validate=None)

  • right: 需要合并的dataFrame
  • how: {‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’}, default ‘inner’
    • left: leftouter join, 使用left frame的主键
    • right: rightouter join, 使用 right frame 的主键
    • outer: full outer join, 使用两个frame的主键,按字母顺序排序
    • inner: inner join, 使用两个frame的主键的交集,保持左键的顺序
    • cross: 从两个坐标系创建笛卡尔积,保持左键的顺序
  • on: 设定合并基准列,若on = None, 则默认为两个DataFrames中的列的交集
  • left_on 和right_on: 指定左右数据集的合并名称,有时左右数据集的索引名称相同,则可以设置left_on和right_on参数来合并两个数据集
  • left_index 和 right_index: 合并索引
  • sort: 若 sort = True, 则连接键按字母顺序排序,若sort = False, 则连接键按 ‘how’ 关键字排序
  • suffixes: 指示要添加到左边和右边重叠列名的后缀。传递值None而不是字符串,以指示左列名称或右列名称应按原样向左,不带后缀。
  • indicator: 若 indicator = True, 则新加名为’_merge’显示合并方式 (left_only, both, right_only)
  • suffixes: 连接方式,包括一对一,一对多,多对多

这篇写的挺好的:Pandas学习笔记六——合并数据集:连接(join)和合并(merge)操作

  • 保存数据
Resul.to_csv('result.csv', index = False)


🚩 2.5 不同数据类型的数据重构

2.5.1 DataFrame和Series类型的互换

1. DataFrame → Series: df.stack(), 把列旋转成行

text = pd.read_csv('result.csv')
text.head()
unit_result = text.stack()

Output:
在这里插入图片描述⚠️ 但数据保存后还是 DataFrame 格式

unit_result.to_csv('unit_result.csv')
test = pd.read_csv('unit_result.csv')
test.head()

Output:
在这里插入图片描述

2. Series → DataFrame: df.unstack(), 把行旋转成列

unit_result = unit_result.unstack()

Output:
在这里插入图片描述


数据重构之数据聚合与运算

🚩 2.6 数据运用

groupby的运用
《利用Python进行数据分析·第二版》第十章 数据聚合与分组运算

2.6.1 计算泰坦尼克号男性与女性的平均票价

import numpy as np
import pandas as pd
df = pd.read_csv('./result.csv')

# 输出为Series类型
# 方法一
df.groupby('Sex')['Fare'].mean()
# 方法二
df1 = df['Fare'].groupby(df['Sex']).mean()

# 输出为DataFrame类型
# 方法一
df.groupby('Sex')[['Fare']].mean()
# 方法二
df1 = df[['Fare']].groupby(df['Sex']).mean()

⬇️ 以下输出类型均为Series

2.6.2 统计泰坦尼克号中男女的存活人数

df2 = df.groupby('Sex')['Survived'].sum()

💡 从 2.6.1 到 2.6.2 中,这些运算可以通过agg()函数来同时计算。并且可以使用rename函数修改列名

# 若公式'mean'或'sum'加上中括号(e.g. ['mean'], ['sum']),则表头会多出一行显示公式名称
# 输出类型为 DataFrame
# reset_index()可以解决主键与列名称不在一行的问题
num_agg = {'Fare':'mean', 'Survived': 'sum'}  
df.groupby('Sex').agg(num_agg).rename(columns={'Fare': 'mean_fare', 'Survived': 'sum_Survived'}).reset_index()

将2.6.1和2.6.2的数据合并,并保存到sex_fare_survived.csv

# merge可以合并Series类型的数据
# 输出类型为 DataFrame
sex_fare_survived = pd.merge(df1,df2,on='Sex').reset_index()
sex_fare_survived.to_csv('sex_fare_survived.csv', index = False)

2.6.3 计算客舱不同等级的存活人数

df['Survived'].groupby(df['Pclass']).sum()

2.6.4 统计在不同等级的票中的不同年龄的船票花费的平均值

df.groupby(['Pclass','Age'])['Fare'].mean().head()

⬇️ 以下输出类型均为DataFrame
# 计算泰坦尼克号男性与女性的平均票价
dfd1 = df[['Fare']].groupby(df['Sex']).mean().reset_index()

# 统计泰坦尼克号中男女的存活人数
dfd2 = df.groupby('Sex')[['Survived']].sum()

# 合并数据
# join 可以合并 DataFrame类型的数据
dfd1_dfd2 = dfd1.join(dfd2)

2.6.5 得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数)

age_survived = df.groupby('Age')['Survived'].sum()
ageSurvivedMax = age_survived.max()
survivedMax = ageSurvivedMax / df['Survived'].sum()
# output: 0.043859649122807015
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数据挖掘是一种从大型数据库中分析和发现预测信息的过程。它涉及使用Python编程语言和数据挖掘技术来处理和分析数据数据挖掘可以帮助我们从数据中提取有用的模式、趋势和关联,以便做出预测和决策。 学习使用Python进行数据挖掘可能会面临一些困难,特别是在早期阶段。您可能会遇到许多错误消息和挑战,但是通过坚持不懈地练习和应用到自己的数据集上,您可以逐渐掌握数据挖掘的技巧和方法。使用Python数据挖掘工具和库,如Pandas,可以帮助您处理和分析数据,提供了一个简单的平台来组织、排序和操作数据。 要进行数据挖掘,您需要具备一定的统计学基础和编程知识。掌握Python编程语言和相关的数据挖掘技术,可以帮助您有效地处理大规模的数据,并从中提取有用的信息。 引用\[1\]和\[2\]提供了关于数据挖掘的一些背景和挑战,而引用\[3\]介绍了使用PythonPandas模块来清理和重构数据的方法。这些资源可以帮助您更好地理解和应用Python数据挖掘技术。 #### 引用[.reference_title] - *1* *2* *3* [Python数据挖掘指南](https://blog.csdn.net/dmg17866/article/details/101377781)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值