【Python进阶(八)】——数据框

news2024/12/25 14:12:04

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972

   个人介绍: 研一|统计学|干货分享
         擅长Python、Matlab、R等主流编程软件
         累计十余项国家级比赛奖项,参与研究经费10w、40w级横向

文章目录

  • 1 数据框的创建方法
    • 1.1 直接定义
    • 1.2 导入定义
  • 2 查看行或列
  • 3 引用行或列
  • 4 index操作
  • 5 删除或过滤行/列
  • 6 算数运算
  • 7 大小比较运算
  • 8 统计信息
  • 9 排序
  • 10 导入/导出
  • 11 缺失数据处理
  • 12 分组统计

【Python进阶(八)】——数据框,建议收藏!


该篇文章主要讲解了Python数据结构之DataFrame,针对DataFrame不同数据操作形式及基础统计方法进行实例演示。

1 数据框的创建方法

1.1 直接定义

  运行程序:

import numpy as np
import pandas as pd
df1=pd.DataFrame(np.arange(10).reshape(2,5))
df1

  运行结果:

1.2 导入定义

  运行程序:

import openpyxl 
import pandas as pd
df2=pd.read_excel('1副本1.xlsx')#读取数据
df2.shape#形状
df2=df2[["Time     t(s)","Q"]]#提取对应列
df2.head() #显示前5行

  运行结果:

(404, 1300)

2 查看行或列

  运行程序:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"  ##执行多输出

df2.index#查看行名,即行的显式索引-用index属性

df2.index.size #行大小

df2.columns #显示列名
 
df2.columns.size#列大小

    
df2.shape#数据框形状

print("行数为:", df2.shape[0])
print("列数为:", df2.shape[1])

  运行结果:

RangeIndex(start=0, stop=404, step=1)
404
Index(['Time     t(s)', 'Q'], dtype='object')
2
(404, 2)
行数为: 404
列数为: 2

3 引用行或列

  运行程序:

df2["Time     t(s)"].head()#时间列前几行

df2.Q.head()  #Q列前几行

df2["Time     t(s)"][2]  #时间列第3个

df2.Q[2]#Q列第三个

df2["Time     t(s)"][[2,4]]#时间列第3个和第5个

df2.loc[1,"Time     t(s)"] #显式index,时间列第2个

df2.iloc[1,0] #第2行第1列,隐式index


df2[["Q","Time     t(s)"]].head()#Q和时间列前5行,显式访问非连续元素

  运行结果:

0    0.0
1    0.5
2    1.0
3    1.5
4    2.0
Name: Time     t(s), dtype: float64
0    2579.22
1    2583.97
2    2583.97
3    2588.75
4    2593.44
Name: Q, dtype: float64
1.0
2583.97
2    1.0
4    2.0
Name: Time     t(s), dtype: float64
0.5
0.5

4 index操作

  运行程序:

df2.index#索引状况

df2.columns#列名

df2["Q"].head()#Q列前几行

df2.reindex(index=["1","2","3"],columns=["1","2","3"])#更改显示index方法,调整index顺序
df2.head()#df2前几行
  
df2.reindex(index=[2,3,1], columns=["Q","Time     t(s)"])#更改显示index方法,调整index顺序

df3=df2.reindex(index=[2,3,1], columns=["diagnosis","id","area_mean","MyNewColumn"],fill_value=100)#修改index顺序后,新增列

df3    

  运行结果:

RangeIndex(start=0, stop=404, step=1)
Index(['Time     t(s)', 'Q'], dtype='object')
0    2579.22
1    2583.97
2    2583.97
3    2588.75
4    2593.44
Name: Q, dtype: float64

5 删除或过滤行/列

  运行程序:

import pandas as pd
df2 = pd.read_csv('bc_data.csv')#导入文件

df2=df2[["id","diagnosis","area_mean"]]#提取对应列
df2.head()#显示前几行

df2.drop([2]).head()#删除第三行

df2.head()#显示前几行

  运行结果:

  运行程序:

import pandas as pd
df2 = pd.read_csv('bc_data.csv')
df2=df2[["id","diagnosis","area_mean"]]
    
df2.drop([3,4], axis=0, inplace=True)#删除第4、5行,》drop不改变数据框本身
df2.head()

  运行结果:

  运行程序:

import pandas as pd
df2 = pd.read_csv('bc_data.csv')
df2=df2[["id","diagnosis","area_mean"]]
df2.drop(["id","diagnosis"], axis=1, inplace=True)#删除列   
    
df2.head()

  运行结果:

  运行程序:

import pandas as pd
df2 = pd.read_csv('bc_data.csv')
df2=df2[["id","diagnosis","area_mean"]]
df2.drop(["id","diagnosis"], axis=1, inplace=True)#删除列   
    
df2.head()

  运行结果:

  运行程序:

import pandas as pd
df2 =pd.read_csv('bc_data.csv')

df2=df2[["id","diagnosis","area_mean"]]
df2[df2.area_mean> 1000].head()#满足对应列值大于1000

  运行结果:

  运行程序:

df2[df2.area_mean> 1000][["id","diagnosis"]].head()#妈祖对应列大于1000且仅显示对应列

  运行结果:

6 算数运算

  运行程序:

df4=pd.DataFrame(np.arange(6).reshape(2,3))
df4#矩阵转成数据框

df5=pd.DataFrame(np.arange(10).reshape(2,5)) #矩阵转成数据框
df5

df4+df5#矩阵加法:先补齐显式index(新增索引对用值为NaN),得到相同结构后再进行计算

  运行结果:

  运行程序:

df6=df4.add(df5,fill_value=10)#默认填充的NAN改为固定值10
df6

s1=pd.Series(np.arange(3))#将数组改变为序列类型
s1


df6-s1#按行广播,先把行改为等长,行内不做循环补齐,只是一行一行计,不会跨行广播

df5=pd.DataFrame(np.arange(10).reshape(2,5))
df5
s1=pd.Series(np.arange(3))
df5-s1

  运行结果:

  运行程序:

df5=pd.DataFrame(np.arange(10).reshape(2,5))
s1=pd.Series(np.arange(3))
df5.sub(s1,axis=1)#逐行计算:df5-s1
    

    
df5=pd.DataFrame(np.arange(10).reshape(2,5))
s1=pd.Series(np.arange(3))
df5.sub(s1,axis=0)#逐列计算:df5-s1

df7=pd.DataFrame(np.arange(20).reshape(4,5))
df7

df7+2#所有数+2

print(df7)
print("df7.cumsum=",df7.cumsum()) #累计逐行求和

df7

df7.rolling(2).sum() #依次计算相邻两个元素之和,即本元素和上一个元素之和,默认按行

df7.rolling(2,axis=1).sum() #依次计算相邻两个元素之和,即本元素和上一个元素之和,按列

df7.cov()#协方差矩阵

df7.corr()#相关系数矩阵

import pandas as pd
df2 = pd.read_csv('bc_data.csv')
df2=df2[["id","diagnosis","area_mean"]][2:5]
df2.T#数据框的转置

  运行结果:

7 大小比较运算

  运行程序:

print(df6)

df6>5#判断元素是否大于5

print(s1)

df6>s1 #判断是否大于s1,按行

  运行结果:

8 统计信息

  运行程序:

import numpy as np
import pandas as pd

df2 = pd.read_csv('bc_data.csv')

df2=df2[["id","diagnosis","area_mean"]]

df2.describe()#描述性统计

dt = df2[df2.diagnosis=='M']#条件过滤,提取满足条件行
dt.head()

dt.tail()#显示最后几行


df2[["area_mean","id"]].head()#条件列前几行

  运行结果:

9 排序

  运行程序:

df2.head(8)

df2.sort_values(by="area_mean",axis=0,ascending=True).head()#行值排序

df2.sort_index(axis=1).head(3)#列值排序
    

df2.sort_index(axis=0,ascending=False).head(3)#index倒序
    

  运行结果:

10 导入/导出

  运行程序:

import os
print(os.getcwd())#查看当前目录

df2.head(3).to_csv("df2.csv")#保存为csv文件

import pandas as pd
df3 = pd.read_csv('df2.csv') #读取文件
df3

df3 = pd.read_csv('df2.csv')#读取文件
df3

df2.head(3).to_excel("df3.xls")#保存为excel文件
df3 = pd.read_excel("df3.xls")#读取excel文件
df3

  运行结果:

11 缺失数据处理

  运行程序:

df3.empty#判断一个数据框是否有空数据集

np.nan-np.nan +1#nan可以参加运算

np.nan-np.nan

None+1 #【提示】报错信息为TypeError: unsupported operand type(s) for +: 'NoneType' and 'int',原因分析:None不能参加算数运算。
        #None是Python基础语法中的特殊数据类型,不属于数值类型,不能参加算数运算

  运行结果:

False
nan
nan
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[28], line 7
      3 np.nan-np.nan +1#nan可以参加运算
      5 np.nan-np.nan
----> 7 None+1

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

  运行程序:

import pandas as pd
import numpy as np
A=pd.DataFrame(np.array([10,10,20,20]).reshape(2,2),columns=list("ab"),index=list("SW"))
A

list("ab")#列表

B=pd.DataFrame(np.array([1,1,1,2,2,2,3,3,3]).reshape(3,3), columns=list("abc"),index=list("SWT"))
B

C=A+B #先补列索引,并补NaN

C

  运行结果:

A.add(B,fill_value=0) #数据框相加,空值补齐NaN

A.add(B,fill_value=A.stack().mean()) #缺失值用均值补齐

A.mean()#按列计算均值

A.stack() #建立多级索引,计算一个数据框中所有index不同列均值

A.stack().mean()

C
C.isnull()#判断数据框每个元素为空值

C.notnull()#判断数据框每个元素不为空值

C.dropna(axis='index')#直接删除缺失值,axis='index':某行存在缺失值,直接删除改行

C.fillna(0)#用0填补空值

C.fillna(method="ffill")#向前填充

C.fillna(method="bfill",axis=1) #向后填充

12 分组统计

  运行程序:

import pandas as pd
df2 = pd.read_csv('bc_data.csv')


df2=df2[["id","diagnosis","area_mean"]]


df2.head()

    
df2.groupby("diagnosis")["area_mean"].mean()#按照diagnosis分组计算area_mean均值

    
df2.groupby("diagnosis")["area_mean"].aggregate(["mean","sum","max",np.median])#按照diagnosis分组计算area_mean均值、求和、最大值、中值

df2.groupby("diagnosis")["area_mean"].aggregate(["mean","sum"]).unstack()#将关系转化为二级索引


    
def myfunc(x):
   x["area_mean"]/=x["area_mean"].sum()
   return x

df2.groupby("diagnosis").apply(myfunc).head()#分组自定义函数计算

  运行结果:

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

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

相关文章

JetBrains 开发工具——学生授权免费申请指南

2022 JetBrains 开发工具——学生授权免费申请指南 | JetBrains 博客https://blog.jetbrains.com/zh-hans/blog/2022/08/24/2022-jetbrains-student-program/ 第一次下载datagrip试用期一个月,在读学生申请试用期1年,可续期。 参考第一个文档申请学生认…

黑神话悟空配置要求是什么?

黑神话悟空最低配置要求是:操作系统Windows1064位、处理器Inteli5-8400或AMDRyzen51600、内存8GBRAM、图形NVIDIAGeForceGTX1060或AMDRadeonRX580、存储空间需要最少50GB可用空间。推荐配置:操作系统Windows1064位、处理器IntelCorei7-9700或AMDRyzen555…

内网渗透的风行者—Yasso

Yasso : Yasso,让内网渗透变得简单而高效。- 精选真开源,释放新价值。 概览 Yasso是由sairson精心打造的内网渗透辅助工具集,它为网络安全专家和渗透测试人员提供了一个功能强大的工作平台。在面对错综复杂的网络环境时&#xff…

uniapp实现区域滚动、下拉刷新、上滑滚动加载更多

背景&#xff1a; 在uniapp框架中&#xff0c;有两种实现办法。第1种&#xff0c;是首先在page.json中配置页面&#xff0c;然后使用页面的生命周期函数&#xff1b;第2种&#xff0c;使用<scroll-view>组件&#xff0c;然后配置组件的相关参数&#xff0c;包括但不限于&…

【SpringBoot】电脑商城-07-上传头像

基于SpringMVC的文件上传 1 MultipartFile接口 MultipartFile接口常用的的API见下表&#xff1a; 方法功能描述String getOriginalFilename()获取上传文件的原始文件名&#xff0c;即该文件在客户端中的文件名boolean isEmpty()判断上传的文件是否为空&#xff0c;当没有选择…

flowable源码解读——并行多实例节点任务是否是顺序生成

最近在项目开发中需要在多实例开始监听里修改一个全局的计数变量&#xff0c;不太确定并行多实例任务在底层引擎是顺序生成还是并行生成的&#xff0c;如果是顺序生成的则不影响&#xff0c;如果是并行生成 则修改一个全局的计数变量就会出现数据错误问题&#xff0c;查阅了flo…

JVM的原理和性能调优

java是如何做到跨平台&#xff1f; 将java文件通过javac编辑到JVM中&#xff0c;由JVM根据操作系统&#xff08;Windows&#xff0c;Linux&#xff09;的需要&#xff0c;生成出相对应的二进制文件&#xff0c;从而达到跨平台的特性。 JVM的组成 将java文件通过javac编译成clas…

逻辑回归C参数选择,利用交叉验证实现

目录 前言 一、C参数 二、交叉验证 1.交叉验证是什么 2.交叉验证的基本原理 3.交叉验证的作用 4.常见的交叉验证方法 三、k折交叉验证 四、C参数和k折交叉验证的关系 五、代码实现 1.导入库 2.k折交叉验证选择C参数 3.建立最优模型 总结 前言 逻辑回归&#xff0…

TCP vs UDP:揭秘可靠性与效率之争

概述 今天我们开始主要讲解TCP的相关知识点。在之前讲解分层章节的时候&#xff0c;我们提到过一个重要观点。在网络层及以下几层&#xff0c;更多的是让主机与主机建立连接&#xff0c;也就是说你的电脑需要知道另一台电脑在哪里才能连接上它。然而&#xff0c;在网络中的通信…

世界各国-经济距离数据汇总(2005-2022年)

世界各国-经济距离数据汇总&#xff08;2005-2022年&#xff09; 经济距离是衡量国家之间经济制度差异的一个重要概念&#xff0c;它不仅包括地理距离&#xff0c;还涵盖了费用、时间、劳动力等因素&#xff0c;并且受到消费者行为的影响。随着全球化的深入发展&#xff0c;国家…

微信H5下载文件、微信浏览器无法下载文件解决方案

手机端的微信访问网页的时候&#xff0c;是禁止直接下载文件的 但是IOS端可以预览.txt/.doc/.docx/.xls/xlsx/.pdf等格式的文件&#xff0c;Android端在下载这些格式的文件时&#xff0c;可以唤起 ‘即将离开微信&#xff0c;在浏览器打开’ 提示 所以&#xff0c;根据手机微…

【计算机组成原理】三、存储系统:3.磁盘存储器(磁盘阵列RAID)

7.磁盘存储器&#xff08;机械&#xff09; 考点&#xff1a;磁盘存取时间的计算 与操作系统有重合&#xff0c;操作系侧重算法管理&#xff0c;计组侧重硬件 计算机的外存储器又称为辅助存储器&#xff0c;目前主要使用磁表面存储器。 所谓“磁表面存储”&#xff0c;是指把某…

等保测评基础:了解等级保护的基本概念

在数字化时代&#xff0c;信息安全已成为企业乃至国家层面不可忽视的议题。等级保护制度&#xff0c;作为我国信息安全保障体系的重要组成部分&#xff0c;旨在通过标准化、等级化的安全管理措施&#xff0c;确保信息系统安全可控。本文旨在为初学者提供等保测评的基础知识&…

Aixos食用指南,超全面详细讲解!

前言&#xff1a;axios是目前最流行的ajax封装库之一&#xff0c;用于很方便地实现ajax请求的发送。特意花费了两个小时为大家准备了一份全面详细的Aixos食用指南&#xff0c;需要的小伙伴点个关注 哦~&#x1f495; &#x1f308;&#x1f308;文章目录 Axios 简介 Axios 特…

Java重修笔记 第三十七天 日期类

第一代日期类&#xff1a;Date 1. 通过 new 一个 Date 对象来获取当前时间 2. 通过 SimpleDateFormat 对象来格式化时间的输出 public class Date01 {public static void main(String[] args) {// 获取系统当前时间Date date01 new Date();System.out.println("当前日…

周边乡村游小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;游客&#xff0c;景点信息管理&#xff0c;景点美食管理&#xff0c;美食类型管理&#xff0c;景点攻略管理&#xff0c;特产信息管理&#xff0c;特产类型管理&#xff0c;系统管理 微信端账号功能包…

猫头虎分享:如何选择GPT-4、GPT-4 Turbo、GPT-4o 和 GPT-4o mini?

猫头虎分享&#xff1a;如何选择GPT-4、GPT-4 Turbo、GPT-4o 和 GPT-4o mini&#xff1f; 大家好&#xff0c;我是猫头虎 &#x1f44b;&#xff0c;今天我们要讨论的是在各种场景下如何选择合适的智能助手模型。随着人工智能技术的发展&#xff0c;OpenAI推出了多种型号的GPT…

【C++ Primer Plus习题】2.3

问题: 解答: #include <iostream> using namespace std;void print01() {cout << "三只眼瞎的老鼠" << endl; }void print02() {cout << "看他们怎么跑" << endl; }int main() {print01();print01();print02();print02();r…

EmguCV学习笔记 VB.Net 6.3 轮廓外接多边形

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

聚类分析|距离与相似系数|层次聚类|K均值聚类|SPSS及Matlab

聚类分析问题描述 聚类分析问题描述 人类认识世界的方法之一就是将事物按照各种属性或特征分成若干类别。 物以类聚、人以群分。分类方法多种多样&#xff0c;简单直接的如高、矮、胖瘦。使用的信息量小&#xff0c;但对类别界限附近的案例&#xff0c;分类结果不一定合适。 …