python的DataFrame和Series

Series、DataFrame

  • 创建

pd.Series()
pd.DataFrame() # 字典{'列名':[值1,值2],} [[]]  [()]

numpy Pandas的底层的数据结构,就是numpy的数组 ndarray

  • 常用属性

    • shape (行数,) (行数,列数)

    • values → ndarray

    • index 索引名

    • size

    • columns 列名

  • 常用方法

    • head() tail()

    • 统计方法

      • describe()

      • min() max() mean() std() median() count()

    • 修改数据的 inplace

      • drop_duplicates() 去重

      • sort_values() 排序

    • unique()

    • dataframe info() 返回相关的信息

  • 布尔值列表做数据筛选 类似于SQL的where条件

    • df[ []]

    • 多个条件进行筛选, 每个条件要使用() 包裹起来, 要是用 & | 。 不能使用 and or

  • Series、DataFrame 进行计算

    • 行索引相同的会在一起进行计算, 找不到相同索引的行, 返回NaN

    • 数值型的列和 数值的常量进行计算 , 不需要遍历的

数据的保存和加载

  • df.to_XXX

    • 自动添加的行索引, 如果不想保存 index = False

  • pd.read_XXX

1 DataFrame查询数据操作

获取数据的一列或多列

import pandas as pd
df = pd.read_csv('data/LJdata.csv')
# 两种写法都可以获取数据中的一列
df['区域'] # 推荐这种写法  返回Series   获取的Series 会有一个name属性, 这个属性中会保存的是df的列名信息
​
df.区域  # 当列名比较特殊的时候, 和一些方法、属性的名字冲突, 得到的结果会想的不一样, 不会返回这一列数据

获取多列, [列名的列表]

df[['区域','价格']]
# 如果列表里只有一个元素, 返回的也是一个dataframe

df.loc

  • loc 是属性 后面接[] 来获取df中的部分数据

  • loc[] []传入的是 行, 列名字, 不是编号

df.loc[0]  
df.[ 行名处理, 列名处理]
df.loc[[2,4,6],['区域','价格']]
  • loc 支持切片, loc切片操作两边都是闭区间

df.loc[:3,:'朝向']

行名 3之前,包含3, 列名在朝向之前, 包含朝向, 返回对应的数据

df.iloc

  • iloc 是属性 后面接[] 来获取df中的部分数据

  • iloc [] []传入的是 行, 列编号, 不是名字

df.iloc[0,0] # 获取的是第0行,第0列 格里的数据
df.iloc[:2,:3]  # iloc 切片 左闭右开
df.iloc[[0,1,2],[1,2,3]] # 获取第0,1,2行, 第1,2,3列数据

query方法

  • 类似于SQL的where 条件 , 传入的条件是一个字符串

- 区域是望京租房的数据查询出来
df[df['区域']=='望京租房'].head()
df.loc[df['区域']=='望京租房'].head()
df.query('区域=="望京租房"').head()

query函数, 传入条件字符串, 条件中又包含了字符串,需要注意字符串 引号闭合的顺序

  • 使用query传入多个条件

df.query('区域 in ["望京租房","回龙观租房"] and 朝向 in ["东","南"]')

多个条件在一起拼的时候要是用and or 而不是 & |

isin方法 在某个数据范围内

通过 df.isin(values=[值1, 值2, ...]) 判断df中的数据值是否在values列表值中, 返回由布尔值构成的新df

原df中数据值在values列表中返回True, 否则返回False

  • 区域是望京租房的数据查询出来

df['区域'].isin(['望京租房','回龙观租房'])
# 多个isin 用 & | 来拼接
df[(df['区域'].isin(['望京租房','回龙观租房'])) & (df['朝向'].isin(['西南 东北','南 北'])) ]

2 DataFrame增删改数据

2.1 增加一列数据

两种方法

  • df['新列名'] = ’新值‘ df['新列名'] = series_新值

  • df.insert(loc = 插入的位置编号 ,column ='新列名' ,value = 要插入的值)

  • 区别,insert可以指定插入的位置编号, df['新列名'] = ’新值‘ 插入的新列在df的最后

import pandas as pd
df = pd.read_csv('data/LJdata.csv')
df_head = df.head() # 取出前五条并保存
df_head['省份']='北京'  # 每一行都会赋值为 北京
df_head['区县'] = ['朝阳区','朝阳区','西城区','昌平区','朝阳区'] # 传入列表长度和df长度必须一致

insert

df.insert(loc=,column=,value=)
- loc 插入的列的序号
- column 插入列的列名
- value 插入这一列具体的取值
​
df_head2.insert(0,column='省份',value='北京')

需要注意, insert 是我们课程中涉及到的唯一一个修改数据, 直接在原始数据上修改的api

其它修改数据的api 比如排序, 去重, 等都会有一个inplace参数 默认是False 默认会复制一份数据,在副本上修改, 这个insert不会

2.2 删除一列、一行数据

drop方法 默认是按行删除

  • axis 很多操作数据的方法, 既可以按行,也可以按列,比如删除, 比如 求和 求平均, 这一列方法都会有一个参数 axis 默认值是0 可选值是0,1

  • inplace = 默认False 改成True会在原来的数据上进行删除

df_head.drop('省份',axis=1,inplace=True)

2.3 数据去重 drop_duplicates()

df_head3.drop_duplicates(subset=['户型','朝向'])
df_head3.drop_duplicates(subset=['户型','朝向'],keep='last',inplace=True)
df_head3.drop_duplicates(subset=['户型','朝向'],keep='last',ignore_index=True)

subset 传入列名的列表, 用来做重复判断的条件

keep = 默认是first 满足重复条件的数据, 保留第一次出现的, 还可以选last 保留最后一次出现的

ignore_index = 默认是False 去重后会保留原来的索引, 改成True之后, 会重新给从0开始的索引

inplace

2.4 修改数据 直接修改和replace替换

如果只修改一个, 或者一列值整体替换, 可以用直接修改的方式

df.loc[0,’朝向‘] = ’东 北‘   直接找到位置修改
df_head3['价格'] = [4800,5800,6800,7800,8800]

如果要批量替换某个值, 可以用replace方法

df_head3.replace(to_replace='东',value='北')

to_replace = 要被修改的值

value = 修改后的值

注意 to_replace 在dataframe中如果不存在, 代码不会报错, 什么都不会发生

inplace

2.5 series的apply方法 使用自定函数修改数据

apply 使用的场景, 修改的逻辑相对复杂, 使用自带的API不能满足需求

def func(x):print(x)if x=='天通苑租房':return '昌平区'else:return x
​
# 遍历 区域这一列, 每遍历一条数据就会调用一次 func 把每个值传递给func函数 func函数的返回值 作为 apply的结果, 返回的还是Series
s = df_head3['区域'].apply(func)

apply 可以传递出了 series值其它参数, 但是传参必须从第二个参数开始

df_head3 = df.head().copy()
def func(x,arg1,arg2):print(x)if x=='天通苑租房':return arg1else:return arg2
df_head3['区域'].apply(func,args=['昌平区','其它区'])

2.6 DataFrame的apply方法 使用自定函数修改数据

df.apply(func , axis = 默认值0)

  • 默认会传入每一列的series 对象, 如果数据有5列, func就会被调用5次 ,每次传入一列series对象

  • axis = 1 会传入每一行的Series对象, 如果数据有10行, func就会被调用10次, 每次传入一行的series对象

def func1(x):return x['价格']/x['面积']
​
df_head3 = df.head().copy()
df_head3.apply(func1,axis=1)

df.apply() 传入自定义函数的时候,函数也可以接受额外的参数

def func2(x,arg1):# print(x)if x['区域']=='天通苑租房':x['价格'] = x['价格']+arg1return x
​
df_head3.apply(func2,axis=1,args=[2000])

传参 args 一定是列表

2.7 df的applymap方法 (了解)

applymap 会遍历每一个格的数据, 一个一个数据取出来, 交给自定义函数处理

def func3(x):if x=='2室1厅':return '3室1厅'else:return x
df_head3.applymap(func3)

遍历df中所有的数据, 如果值是'2室1厅'修改成3室一厅

3 对行列名字的修改

行索引 s.index df.index

列名(列索引) df.columns

要修改行、列名字,可以直接修改

  • s.index = [] df.index = []

  • df.columns = []

  • s.index[0] = 新值 这种修改方式不支持

修改行列名字的API 三个方法 , 都有Inplace参数

  • df.set_index(列名) 可以设置一列, 作为新的行索引

  • df.reset_index() 重置索引, 设置成从0开始的整数编号索引, 原来的索引会变成一列数据

  • df.rename()

    • 可以修改指定取值的行索引, 列名

    • df.rename(index = {'老值':'新值'},columns={'老值':'新值'})

    • 注意 rename和之前replace类似, 如果老值没有找到, 不会报错, 代码正常运行,只不过什么都不会发生

4 pandas操作Mysql

  • 导包创建连接

from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:root12345@localhost:3306/test1?charset=utf8')

'mysql+pymysql://用户名:密码@mysql服务IP地址:3306/数据库名字?charset=utf8'

  • 写入数据到Mysql

student.to_sql('student', con=engine, if_exists='append', index=False)

  • 从Mysql读取数据

pd.read_sql(sql='student', con=engine.connect(),columns=['id','name','age'])

讲义上写的是engine, 这里由于版本的问题, 需要使用engine.connect()

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

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

相关文章

华为管理工程部的前世今生

我们经常讲管理是一项系统工程,但在企业实际的管理建设和改进中,往往又并没有把管理当作一项系统工程来对待,更没有通过持续的管理变革或业务变革(BT,Business Transformation)来打造这一系统工程&#xff…

磐石云pscc系统电话不能正常使用,或者接不到电话,什么情况?

磐石云PSCC系统电话无法正常使用或接不到电话可能会出现以下情况: 网络问题:可能是由于网络连接不稳定或网络设置问题导致系统电话功能无法正常工作。建议检查网络连接是否正常,确保网络稳定。 系统配置问题:可能是由于系统配置错…

ffmpeg.dll在哪个文件夹?怎么快速的修复ffmpeg.dll文件的丢失

在处理多媒体文件时,ffmpeg.dll文件扮演着至关重要的角色。它是FFmpeg项目的一部分,该项目提供了一套能够录制、转换和流化音视频的工具和库。用户有时可能会遇到 ffmpeg.dll文件丢失的问题,这个问题可能会妨碍视频编辑软件等应用程序的正常运…

Python 表达:探索语言艺术的深度与广度

Python 表达:探索语言艺术的深度与广度 Python,这门简洁而强大的编程语言,以其优雅的表达方式吸引着无数开发者。在Python的世界中,表达不仅关乎代码的执行,更是一种艺术。本文将分四个方面、五个方面、六个方面和七个…

《计算机在材料科学中的应用》、《计算材料学》、《计算化学》、《计算物理学》、《计算矿物学》、《量子动力学与光谱》这些高校课程,优秀大学的老师都是怎么讲的?

《计算机在材料科学中的应用》、《计算材料学》、《计算化学》、《计算物理学》、《计算矿物学》、《量子动力学与光谱》等高校课程面临以下问题 PWmat开课优势:拥有30余年代码开发经验,产品拥有自主知识产权,软著和知识产权均国产化网上可查…

零基础python爬虫从入门到精通

零基础python爬虫从入门到精通 课程介绍学习地址下期更新预报 课程介绍 本套视频教程适合想掌握爬虫技术的学习者,以企业主流版本Python 3.7来讲解,内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、…

BM25算法以及变种算法简介

深入理解TF-IDF、BM25算法与BM25变种:揭秘信息检索的核心原理与应用 原文链接: https://xie.infoq.cn/article/8b7232877d0d4327a6943e8ac BM25算法以及变种算法简介 Okapi BM25,一般简称 BM25 算法,在 20 世纪 70 年代到 80 年代…

Windows 11下载以及安装教程

1.下载安装 Windows 有三种下载方式,根据需求,选择其中一种方式就可以。 安装助手 下载工具,进行下载 下载Windows 11 镜像文件ISO 安装后效果 查看状态 2.下载 Windows 工具 https://pan.baidu.com/s/1dFl9QQ1rIGcsZLUD0dym6A?pwdwin1…

MYSQL数据库客户端常规指令使用

这里新开一章,对MYSQL进行更加底层的系统的一个学习 Mysql常用工具简介 emmmm这里的话就默认大家在linux系统上面都进行了MYSQL的安装了. 在mysql安装完成之后,一般在路径 /usr/bin 下的 我们对该路径进行一个文件的展示 这里是展示出来的辅助工具 …

海外短剧新体验:多平台适用,语言无障碍

前言 在数字化时代的浪潮下,海外短剧作为一种新兴的视听媒介,正逐渐走进我们的生活。这些由国外制作团队精心打造的短片或微电影,不仅内容丰富多彩,更在跨文化传播中展现出独特的魅力。 一、海外短剧系统有什么亮点? …

JS面试题:hash和history的区别

一、hash 模式和 history 模式的介绍 由于 Vue 项目为单页面应用,所以整个项目在开发和构建过程中,仅存在一个HTML物理文件。通过路由系统可以实现将项目的组件与可访问的URL路径进行绑定。由于Vue项目只有一个HTML物理文件,切换页面时既需要…

Android中打印某应用的堆栈信息

先更具报名获取pid adb shell "ps|grep 包名" zygote的堆栈dump 实际上这个可以同时dump java线程及native线程的堆栈&#xff0c;对于java线程&#xff0c;java堆栈和native堆栈都可以得到。 kill -3 <pid> debuggerd的堆栈dump debuggerd是android的一个…

20240604将OK3588-C的核心板刷机Buildroot之后强制横屏

20240604将OK3588-C的核心板刷机Buildroot之后强制横屏 2024/6/4 17:13 viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508/kernel/arch/arm64/boot/dts/rockchip$ grep dsi0 . -R ./Makefile:dtb-$(CONFIG_ARCH_ROCKCHIP) rk3568m-serdes-evb-display-dsi…

代码解读 | Hybrid Transformers for Music Source Separation[01]

一、背景 今天对Hybrid Transformer Demucs代码进行解读&#xff0c;目标&#xff1a;明确图c中各个模块对应的代码具体在工程的哪个地方。解读的代码是开源工程中的htdemucs.py。 具体的paper解读看这篇文章。 二、代码解读 算法整体流程&#xff1a;图c其实是从下往上看的&a…

描述JSP的内置对象

JSP&#xff08;JavaServer Pages&#xff09;内置对象&#xff08;也称为隐式对象或预定义对象&#xff09;是JSP容器为每个页面提供的Java对象&#xff0c;开发者可以直接在JSP页面中使用它们&#xff0c;而无需显式声明。这些内置对象提供了对JSP页面运行环境信息的快速访问…

快速入门C++正则表达式

正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种强大的文本处理工具&#xff0c;广泛用于字符串的搜索、替换、分析等操作。它基于一种表达式语言&#xff0c;使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式不仅在…

Linux 网络配置 01

基本命令 1、查看网络接口信息ifconfig ifconfig&#xff1a;当前设备正在工作的网卡&#xff0c;启动的设备 ifconfig -a &#xff1a;所网络设备 ifconfig信息解析&#xff1a; ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.10 n…

golang接口/枚举/结构使用示例

1.接口定义 // geometry : 定义接口 type geometry interface {area() float64 //函数名 返回类型perim() float64 //函数名 返回类型 } 2.结构定义 // 定义结构area type rect struct {width, height float64 //同类成员写一行&#xff0c;逗号隔开 / 成员名 类型 }// …

堆盘子00

题目链接 堆盘子 题目描述 注意点 SetOfStacks应该由多个栈组成&#xff0c;并且在前一个栈填满时新建一个栈 解答思路 将多个栈存储到一个List中&#xff0c;当入栈时&#xff0c;如果List中最后一个栈容量已经达到cap&#xff0c;则需要新建一个栈&#xff0c;将元素推到…