【python】Pandas 数据分析之数据拼接与缺失值处理\建议在Jupyter Notebook 中运行

news2024/9/23 11:09:27

建议在Jupyter Notebook 中运行
jupyter notebook环境搭建

文章目录

  • 1.演示数据拼接
    • 1.1 加载数据
    • 1.2 df对象和 df对象拼接
  • 1.3 df对象和Series对象 拼接
  • 2.演示 merge() 函数
    • 2.1准备动作
    • 2.2 merge()合并数据 一对一关系
    • 2.3 merge() 合并数据 一对多的关系
  • 3.演示缺失值查看和比较
  • 4.泰坦尼克号数据集 演示:删除 填充数据集
    • 4.1 加载数据 查看缺失信息
    • 4.2 删除缺失值

import numpy as np
import pandas as pd

import sqlite3

import  os
os.chdir(r'D:\hm\homework\pywork\workProject\numpyProject')

1.演示数据拼接

1.1 加载数据

df1 = pd.read_csv('./data/concat_1.csv')
df2 = pd.read_csv('./data/concat_2.csv')
df3 = pd.read_csv('./data/concat_3.csv')
print(df1,df2,df3)

1.2 df对象和 df对象拼接

# concat()函数 既能实现行拼接(默认) 也能实现列拼接 行拼接参考 : 列名 列拼接参考 :索引列(行索引)

# 1.演示行列拼接

pd.concat([df1,df2,df3]) # 行拼接默认



pd.concat([df1,df2,df3],axis='rows') # 行拼接

pd.concat([df1,df2,df3],axis=0) # 0 是 rows 行 效果同上 1是 columns 列

pd.concat([df1,df2,df3],axis=1) # 1 columns 列

# 演示行列拼接时重置 索引和列名

# 无论是 行 还是 列 拼接时 只要忽略索引了 都会用 0~n来填充

pd.concat([df1,df2,df3],axis = 'rows', ignore_index = True) # 行拼接

pd.concat([df1,df2,df3],axis = 'columns', ignore_index = True) # 列拼接

# 行拼接时,参考列名

df4 = pd.DataFrame(['n1','n2','n3'],columns=['A'])
df4
pd.concat([df1,df4],axis= 0) # 未匹配用NAN填充

1.3 df对象和Series对象 拼接

#1. 创建series 对象
s1 = pd.Series(['n1','n2','n3'])
s1



# 2. 使用 concat 拼接df 和 series 对象

pd.concat([df1,s1]) #行拼接

pd.concat([df1,s1],axis= 1) 

df1.append(df2)

pd.concat([df1, df2])
## 1.4 给df对象新增 1列

# 方式1 df对象[列名] = 列表 要求: 列表的长度 要和 df的行数 一致

df1['new_col1'] = [10,20,30,40]
df1

# 方式2 df对象[列名] = series 对象 series对象 值的个数无要求

df1['new_col2'] = pd.Series([1,2,3,4,5])
df1['new_col3'] = pd.Series([1,2,3])
df1['new_col4'] = pd.Series([1,2,3,4])
df1

2.演示 merge() 函数

2.1准备动作

# 1.加载数据 获取 df对象

conn = sqlite3.connect('data/chinook.db')

# 2.从文件中 读取歌曲表的信息

# 参一 sql语句 参二 连接对象

tracks_df = pd.read_sql_query('select * from tracks;',conn)
tracks_df.head()

# 3.从上述的文件中读取歌曲分类表信息

genres_df = pd.read_sql_query('select * from genres;',conn)
genres_df.head()

2.2 merge()合并数据 一对一关系

#1. 查看歌曲风格表的信息
genres_df.head()

# 2. 查看歌曲表的信息,并从中找到 不同的音乐风格的数据

tracks_subset_df = tracks_df.loc[[0,62,76,98,110,193,204,281]]
tracks_subset_df[['TrackId','GenreId','Milliseconds']]

# 3. 合并上述两个表 以 风格为标准合并

# 场景1 内连接

# 参1 : 要被合并的df对象 

# 参2 : on表述两个df合并的 关联字段 如果一样直接写 on 如果不一样 则要写

# left_on = '左表字段名' right_on = '右表字段名'

# 参3 : how表示合并方式 内连接 inner 左连接 left 右链接 right 全(满)连接 outer 默认inner

genres_df.merge(tracks_subset_df[['TrackId','GenreId','Milliseconds']], on ='GenreId',how='inner')

# 左外连接

genres_df.merge(tracks_subset_df[['TrackId','GenreId','Milliseconds']], on ='GenreId',how='left')

# 右外连接

genres_df.merge(tracks_subset_df[['TrackId','GenreId','Milliseconds']], on ='GenreId',how='right')

#满外连接
genres_df.merge(tracks_subset_df[['TrackId','GenreId','Milliseconds']], on ='GenreId',how='outer')

# 如果 关联的多个df有重名的列 则会默认加上 _x _y 这样的 后缀 来源于 suffixes字段 可以通过 suffixes 修改

genres_df.merge(tracks_subset_df[['TrackId','Name','GenreId','Milliseconds']], on ='GenreId')
genres_df.merge(tracks_subset_df[['TrackId','Name','GenreId','Milliseconds']], on ='GenreId',suffixes=('_left','_right'))

2.3 merge() 合并数据 一对多的关系

# 合并 genres 和 tracks 表 

genres_df.merge(tracks_subset_df[['TrackId','Name','GenreId','Milliseconds']], on ='GenreId')

# 计算每种类型音乐的平均市场

# 1. 合并genres(风格表) 和 tracks(歌曲表), 交集

genres_track = genres_df.merge(tracks_df[['TrackId','GenreId','Milliseconds']],on='GenreId')
genres_track

# 2.根据风格id分组 计算时长的平局值

genre_time = genres_track.groupby('GenreId').Milliseconds.mean()
genre_time

pd.to_timedelta(genre_time,unit='ms').dt.floor('s').sort_values()

# 总结: merge() 1.默认是inner 2.关联字段不一致 用 right_on  和 right_on  3. 两个字段有重名 可以通过 suffixes 解决 默认是 _x _y

# 3.演示 join() 合并

# 1. 加载数据 获取df对象

stock_2016 = pd.read_csv('./data/stocks_2016.csv')
stock_2017 = pd.read_csv('./data/stocks_2017.csv')
stock_2018 = pd.read_csv('./data/stocks_2018.csv')
stock_2016
stock_2017
stock_2018

# 2. 默认情况下 join 会参考 df 索引列进行合并连接

stock_2016.join(stock_2017,lsuffix='_2016',rsuffix='_2017') # 默认左外连接

# 3. 设置 两个df对象的Symbol 列为索引列 再次关联

#设置索引列并关联 
stock_2016.set_index('Symbol').join(stock_2017.set_index('Symbol'),lsuffix='_2016',rsuffix='_2017') # 左外连接
stock_2016.set_index('Symbol').join(stock_2017.set_index('Symbol'),lsuffix='_2016',rsuffix='_2017',how = 'right') # 右外连接
stock_2016.set_index('Symbol').join(stock_2017.set_index('Symbol'),lsuffix='_2016',rsuffix='_2017',how = 'outer') # 满外连接 全连接
stock_2016.set_index('Symbol').join(stock_2017.set_index('Symbol'),lsuffix='_2016',rsuffix='_2017',how = 'inner') # 内连接 

# 4. 设置stock_2016 的索引 为:symbol 和 stock_2018 做关联

stock_2018.join(stock_2016.set_index('Symbol'),lsuffix='_2016',rsuffix='_2018',on = 'Symbol',how = 'right') 

# on 参数设定的是函数外 df对象的普通列

# 总结 join 

# 1.默认是左外连接  

# 2.如果有重名字段 需要手动设置后缀名 lsuffix rsuffix

# 3. 可以通过 on 来实现 索引列 和 普通列 做关联
mport numpy as np
import pandas as pd

import sqlite3
import missingno as msno
import  os
os.chdir(r'D:\hm\homework\pywork\workProject\numpyProject')

3.演示缺失值查看和比较

# 在 pandas 中 缺失值来源于 numpy 中 的 NAN nan NaN 他们都表示空

# 1.空值比较

print(np.NAN == True)
print(np.NAN == False)
print(np.NAN == '')
print(np.NAN == 0)

# 2.空和空比较 也都是 False

print(np.NAN == np.nan)
print(np.NAN == np.NaN)
print(np.NAN == np.NAN)

# 3.判断是否为空

print(pd.isnull(np.NAN)) # True
print(pd.isnull('')) # False

print(pd.notnull(np.NAN)) # False
print(pd.notnull('')) # True

4.泰坦尼克号数据集 演示:删除 填充数据集

4.1 加载数据 查看缺失信息

# 1.读取数据 获取df对象

train = pd.read_csv('./data/titanic_train.csv')
train.head()

# 2.查看数据常用的统计值

train.shape

train.info()

train.describe() 

# 3. 报表的形式 查看缺失值

msno.bar(train) #柱状图

msno.heatmap(train) # 查看缺失值之间的关联性

4.2 删除缺失值

# 1. 查看df 对象 

train.isnull().sum() # 查看各列空值情况

# 2. 删除空值

train.dropna() # 默认按行删除 
train.dropna(axis = 'rows') # 效果同上 按行删除 
train.dropna(axis = 0) # 效果同上 按行删除 
train.dropna(axis = 'columns') # 按列删除
train.dropna(axis = 1) # 效果同上 按列删除 

# subset 参数 : 参考的列 即: 该列值为空 才会删除行对应的列

# how 参数 : any 只要有空值 就会 删除` all 都为空值才会删除 

train.dropna(subset= ['Age','Embarked'],how = 'all') 
train.dropna(subset= ['Age','Embarked'],how = 'any')  

# 查看删除后的数据

train.dropna(subset= ['Age','Embarked'],how = 'any').isnull().sum()

train.dropna(subset= ['Cabin','Age']) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macos pyenv 安装python tk 、tkinter图形库方法步骤和使用总结

在macos中, pyenv 是一款用来管理多版本python 的工具, 我们常用的tk图形库是一个独立的工具库,我们在python里面使用的tkinter模块仅是调用这个独立的tk图形库, 所以如果我们希望在python里面使用它, 就必须要先安装t…

委托的注册及注销+观察者模式

事件 委托变量如果公开出去,很不安全,外部可以随意调用 所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫…

金融加密机的定义与功能

金融加密机是一种用于保护金融交易数据和信息安全的重要安全设备。它通过硬件和软件的多重保障,确保金融交易中的敏感数据不被泄露或篡改。以下是关于金融加密机的详细介绍: 一、定义与功能 金融加密机是一种硬件安全设备,通过实现各种密码算…

深度deepin初体验(一)系统详细安装过程 | 国产系统

这里写自定义目录标题 深度deepin初体验(一)系统详细安装过程1.介绍2.安装要求3.环境4.创建虚拟机/系统升级系统选择语言硬盘分区备份文件拷贝系统重启常规设置 深度deepin初体验(一)系统详细安装过程 1.介绍 深度deepin是在debi…

Python开发深度学习常见安装包 error 解决

Python Python 是一种广泛使用的高级编程语言,它以其清晰的语法和代码可读性而闻名。Python 支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。由于其简洁性和强大的标准库,Python 成为了数据科学、机器学习、网络开发、自动化脚…

气膜馆:新型场馆的盈利之道—轻空间

气膜馆作为一种创新的场馆形式,凭借其先进的技术和灵活的应用,正在快速崛起,展现出广阔的市场前景与丰富的盈利潜力。通过多元化的经营模式,气膜馆为创业者提供了前所未有的商机。本文将深入分析气膜馆的盈利模式及其在市场中的竞…

气膜储煤棚:未来能源管理的新选择—轻空间

在全球对可持续发展与环保的日益重视下,传统的煤炭储存方式面临着诸多挑战。气膜储煤棚应运而生,成为现代煤炭储存的理想解决方案。本文将深入探讨气膜储煤棚的优势与应用,为企业提供新的思路。 先进的技术设计 气膜储煤棚采用创新的气膜技术…

AcWing算法基础课-790数的三次方根-Java题解

大家好,我是何未来,本篇文章给大家讲解《AcWing算法基础课》790 题——数的三次方根。本题考查算法为浮点数二分查找。本文详细介绍了一个使用二分法计算浮点数三次方根的算法。通过逐步逼近目标值,程序能够在给定的区间内精确计算出结果&…

关闭小广告【JavaScript】

在 JavaScript 中实现关闭小广告的功能&#xff0c;可以通过监听点击事件来隐藏广告元素。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport&q…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security 登录验证模式 传统的验证登录模式 公开页面&#xff1a;输入url就可以直接访问授权页面&#xff1a;登录之后才可以访问 Jwt验证模式 容易实现跨域不需要在服务器端存储 对比于传统模式将所有的sessionId换成jwt token access token refresh token 过…

如何在Chrome最新浏览器中调用ActiveX控件?

小编最近登陆工商银行网上银行&#xff0c;发现工商银行的个人网银网页&#xff0c;由于使用了ActiveX安全控件&#xff0c;导致不能用高版本Chrome浏览器打开&#xff0c;目前只有使用IE或基于IE内核的浏览器才能正常登录网上银行&#xff0c;而IE已经彻底停止更新了&#xff…

Tile View Kanban Board平铺视图和看板

Goto 数据网格和视图入门 平铺视图&#xff08;TileView 类&#xff09;将数据记录显示为平铺。此视图类型可以以任何自定义方式排列多个元素&#xff08;bound 和 unbound&#xff09;。用户可以按如下方式编辑瓦片&#xff1a; 使用模态 Edit Form。利用 HTML-CSS 平铺模板…

VScode配置连接远程服务器configure ssh Hosts

VScode配置连接远程服务器&#xff0c;具体步骤 一、点击VScode左下脚这两个∟的按钮 二、点击完上面的按钮后&#xff0c;出现如下的下拉选项&#xff0c;选择“Connect to Host” 三、选择“Connect to Host”后&#xff0c;下拉选项会更新&#xff0c;选择“Configure SSH …

openFrameworks_如何使用ofxXmlSettings和ofxGui来创建识别界面

效果图&#xff1a; 代码及详解 1.添加两个插件的头文件: #include "ofxGui.h" #include "ofxXmlSettings/src/ofxXmlSettings.h" 2.添加GUI部分&#xff0c;然后在.h声明右边的openframeworks的UI部分&#xff0c;包括面板ofxPanel&#xff0c;按钮ofx…

【JUC并发编程系列】深入理解Java并发机制:线程局部变量的奥秘与最佳实践(五、ThreadLocal原理、对象之间的引用)

文章目录 【JUC并发编程系列】深入理解Java并发机制&#xff1a;线程局部变量的奥秘与最佳实践(五、ThreadLocal原理、对象之间的引用)1. 基本 API 介绍2. 简单用法3. 应用场景4. Threadlocal与Synchronized区别5. 内存溢出和内存泄漏5.2 内存溢出 (Memory Overflow)5.2 内存泄…

如何融合文本信息提高时序预训练模型?

今天小编给大家介绍两篇联合文本和时序数据进行预训练的文章。 UniTime: A Language-Empowered Unified Model for Cross-Domain Time Series Forecasting 文献地址&#xff1a;https://arxiv.org/pdf/2310.09751.pdf 代码地址&#xff1a;https://github.com/liuxu77/UniTim…

【永磁同步电机(PMSM)】 4. 同步旋转坐标系仿真模型

【永磁同步电机&#xff08;PMSM&#xff09;】 4. 同步旋转坐标系仿真模型 1. Clarke 变换的模型与仿真1.1 Clarke 变换1.2 Clarke 变换的仿真模型 2. Park 变换的模型与仿真2.1 Park 变换2.2 Park 变换的仿真模型 3. Simscape标准库变换模块3.1 abc to Alpha-Beta-Zero 模块3…

【COMSOL】1-1 COMSOL6.2软件安装

1.解压COMSOL软件安装包&#xff0c;以管理员身份运行Setup.exe 2.选择简体中文&#xff0c;点击下一步&#xff0c;点击新安装。 3.选择许可证文件 4.自定义安装的位置 5.取消勾选更新&#xff0c;点击下一步 6.若已安装MATLAB则自动识别文件夹&#xff0c;若未安装空着即可&a…

Linux学习笔记(2)

Linux学习笔记&#xff08;2&#xff09; 知识点&#xff1a; 1.打包、压缩——是什么、为什么、怎么做&#xff1f; 什么是打包、压缩&#xff1f; 打包&#xff1a;把文件合并。 压缩&#xff1a;通过一定算法减少体积。 为什么要进行打包、压缩&#xff1f; 打包&…

花园管理系统

基于springbootvue实现的花园管理系统 &#xff08;源码L文ppt&#xff09;4-074 4功能结构 为了更好的去理清本系统整体思路&#xff0c;对该系统以结构图的形式表达出来&#xff0c;设计实现该“花开富贵”花园管理系统的功能结构图如下所示&#xff1a; 图4-1 系统总体结…