Pandas -----------------------基础知识(二)

devtools/2024/9/23 16:52:28/

dataframe读写数据操作

import pandas as pd# 准备数据(字典)
data = [[1, '张三', '1999-3-10', 18],[2, '李四', '2002-3-10', 15],[3, '王五', '1990-3-10', 33],[4, '隔壁老王', '1983-3-10', 40]
]df = pd.DataFrame(data, columns=['id', 'name', 'birthday', 'age'])
df

 写到csv文件中 ,路径在当前目录同级的output目录下,不需要索引,不需要标题,列与列的分隔符为‘*’,只显示id,name,birthday三列,并且为追加模式

df.to_csv('./output/student11.csv',index=False,
header=False,
sep='*',
columns=['id', 'name', 'birthday'],
mode='a')

读取csv文件 将第零列作为索引列,不需要标题,只显示一列,两行数据

pd.read_csv('./output/student11.csv',
index_col=0,
header=None,
usecols=[0],
nrows=2)

 写到excel文件中 不需要索引 需要标题

df.to_excel('./output/student11.xlsx',index=False,header=True)

读excel文件,索引为第零列,标题也是第零行,跳过一行

pd.read_excel('./output/student11.xlsx',index_col=0,header=0,skiprows=1)

 

pd.read_excel('./output/student12.xlsx',index_col=0)

 将数据写到mysql中 (可能出现中文乱码错误 创建库的时候 加上

create database test character set 'utf8';

建立连接 mysql数据库+pymysql子数据库 ://用户名:密码@ip地址:端口号/库名?编码

# 连接
from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8')

 con是上面的连接  如果存在就替换 不需要索引

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

 追加

from sqlalchemy import typesdtype = {'birthday':types.Date}df.to_sql('student_2', con=engine, if_exists='append', index=False, dtype=dtype)

从sql中读取数据

import pandas as pd
from sqlalchemy import create_engine
# 1 通过表读
conn = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8')# df = pd.read_sql("student_2", con=conn)
df = pd.read_sql_table("student_2", con=conn)df

 通过从mysql中读取 然后 查询表

#  sql 读取
import pandas as pd
from sqlalchemy import create_engine
# 1 通过表读
conn = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8')# df = pd.read_sql("select * from student_2 where age>30", con=conn)
df = pd.read_sql_query("select * from student_2 where age>30", con=conn)df

获取df子集

加载数据 获取前五行 (tail()获取后五行)

import pandas as pd# 加载数据 ../data/b_LJdata.csv
df = pd.read_csv('./data/b_LJdata.csv').head()
df

获取户型列

法一  :df['户型']
法二  :df.户型

 获取多列  (再包一层)

df[['户型','价格']]

 获取面积大于80的数据

df['面积']>80

list(df['面积']>80)

[False, False, True, True, False]

法一:df[[False, False, True, True, False]]

或者 

法二:df[df['面积']>80]

 通过切片获取数据

df[:5:3]   左闭右开  [start:end:step]

案例 : 获取天通苑租房、望京租房、北苑租房 且朝向为东或南的房子信息

 

 最后用new_df再包一下

(new_df['区域']=='天通苑租房') | (new_df['区域']=='望京租房') | (new_df['区域']=='北苑租房')
或者
new_df['区域'].isin(['天通苑租房','望京租房','北苑租房']) 

(new_df['朝向']=='东') | (new_df['朝向']=='南')

或者

new_df['朝向'].isin(['东','南'])

((new_df['区域']=='天通苑租房') | (new_df['区域']=='望京租房') | (new_df['区域']=='北苑租房')) & ((new_df['朝向']=='东') | (new_df['朝向']=='南'))

或者 

new_df[new_df['区域'].isin(['天通苑租房','望京租房','北苑租房']) & new_df['朝向'].isin(['东','南'])]

#法一
new_df[
(  (new_df['区域']=='天通苑租房') | 
(new_df['区域']=='望京租房') | 
(new_df['区域']=='北苑租房')   ) 
& 
((new_df['朝向']=='东') | 
(new_df['朝向']=='南'))
]
# 法二
new_df[new_df['区域'].isin(['天通苑租房','望京租房','北苑租房']) 
& new_df['朝向'].isin(['东','南'])]

df方法

  • loc通过行列名获取子集
  • iloc通过行列下标获取子集
  • query函数获取子集
  • isin函数获取子集

 加载数据获取前十行

import pandas as pddf = pd.read_csv('./data/b_LJdata.csv')
df
new_df = df.head(10)
new_df

 

loc通过行列名获取子集

new_df[new_df.index == 2] #获取索引为2这行

new_df.loc[2] #series对象

new_df[new_df.index.isin([2,3,4])] 

new_df.loc[[2,3,4]]  #注意两个[]

new_df[['区域','地址','价格']] #获取多列

切片 

new_df.loc[:6:2]  左闭右闭

区别于

new_df[:6:2] 左闭右开

布尔值向量获取行数据

求面积大于85的房子的区域,户型和价格

new_df.loc[new_df['面积']>85, ['区域', '户型', '价格']]

等价于

new_df[new_df['面积']>85][['区域','户型','价格']]

new_df.loc[[1,3,5]] #根据位置 取第一第三第五行数据

new_df.loc[[1,3,5],['区域', '面积', '价格']]

new_df.loc[:,'区域':'价格':2]  逗号左边表示取几行逗号右边表示要几列

iloc通过行列下标获取子集

行下标获取一行

new_df.iloc[2]  与new_df.loc[2]相同

new_df[new_df.index==2]

获取某个

new_df.iloc[2,1]

'远见名苑'

获取多行数据

new_df.iloc[[2,3]] 同 new_df.loc[[2,3]] 同 new_df[new_df.index.isin([2,4])]

new_df.iloc[1:3:1] 左闭右开

new_df.iloc[:,1:3]  全部行,列从(索引)第一列到第三列 左闭右开 步长为一

new_df.iloc[[2,5,8],[0,2]]  同 new_df.loc[[2, 5, 8], ['区域', '户型']]
 或new_df[new_df.index.isin([2,5,8])][['区域','户型']]

isin函数获取子集

new_df.isin(['天通苑租房', '南', 50, 103])

原数据

new_df[new_df.isin(['天通苑租房', '南', 50, 103])] #再套一层

表示两个条件同时成立  满足区域 满足朝向

new_df[new_df['区域'].isin(["天通苑租房", "北苑租房", "望京租房"]) & new_df['朝向'].isin(["南", "东"])]

在上述条件下 求面积

new_df[new_df['区域'].isin(["天通苑租房", "北苑租房", "望京租房"]) & new_df['朝向'].isin(["南", "东"])]['面积']

new_df['面积'][new_df['区域'].isin(["天通苑租房", "北苑租房", "望京租房"]) & new_df['朝向'].isin(["南", "东"])]

 query函数获取子集

new_df.query('区域 in ("天通苑租房", "北苑租房", "望京租房") and 朝向 in ("南", "东")')

  • 目标: 查询 区域是 北苑租房
new_df[new_df['区域']== '北苑租房']
new_df.loc[new_df['区域']== '北苑租房']
new_df.iloc[new_df.index[new_df['区域']=='北苑租房']]
new_df.query('区域=="北苑租房"')

  • 目标: 查询 区域是 天通苑租房 北苑租房 小西天租房; 朝向是 南 东南
new_df[(new_df['区域'].isin(['天通苑租房', '北苑租房', '小西天租房'])) & (new_df['朝向'].isin(['南', '东南']))]
new_df.query('区域 in ("天通苑租房", "北苑租房", "小西天租房") and 朝向 in ("南", "东南")')

  • 目标: 查询 区域是 天通苑租房 北苑租房 小西天租房; 朝向是 南 东南 对应 价格
new_df.query('区域 in ("天通苑租房", "北苑租房", "小西天租房") and 朝向 in ("南", "东南")')['价格']
new_df['价格'].to_frame()[(new_df['区域'].isin(['天通苑租房', '北苑租房', '小西天租房'])) & (new_df['朝向'].isin(['南', '东南']))]


http://www.ppmy.cn/devtools/116089.html

相关文章

数据结构 - 概述及其术语

经过上一章节《数据结构与算法之间有何关系?》的阐述,相信大家对数据结构多少有了点了解,今天我们将进入数据结构的正式学习中。 在计算机科学中,数据结构是一种数据管理、组织和存储的格式。它是相互之间存在一种或多种特定关系的…

【计算机网络】初识网络

初识网络 初识网络网络的发展局域网广域网 网络基础IP地址端口号协议五元组协议分层OSI 七层模型TCP/IP五层模型封装和分用"客户段-服务器"结构 初识网络 网络的发展 在过去网络还没有出现的时候, 我们的计算机大部分都是独自运行的, 比如以前那些老游戏, 都是只能…

線上測試代理IP詳細教程

在使用代理IP之前,進行線上測試是非常必要的。以下是幾種主要原因: 驗證代理IP的有效性:有些代理IP可能已經失效,無法正常使用。通過測試,可以確保代理IP是有效的。檢查匿名性:不同的代理IP提供不同級別的…

假期学习笔记总结--iOS 自动释放池

iOS 自动释放池 https://juejin.cn/post/6844904094503567368#heading-23 ARC和MRC 苹果在 iOS 5 中引入了ARC(Automatic Reference Counting)自动引用计数内存管理技术,通过LLVM编译器和Runtime协作来进行自动管理内存。LLVM编译器会在编…

面试速通宝典——1

1. 内存有哪几种类型? ‌‌‌‌  内存分为五个区,堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量&#…

MQ入门(一):同步调用和异步调用--RabbitMQ基础入门

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装部署 2.2.RabbitMQ基本架构 2.3.收发消息 2.3.1.交换机 2.3.2.队列 2.3.3.绑定关系 2.3.4.发送消息 2.4.数据隔离 2.4.1.用户管理 2.4.2.virtual host 1.初识MQ 微服务一旦拆分&…

基于等保2.0标准——区块链安全扩展要求探讨

在数字经济时代,区块链作为新技术,能够推进经济社会规则体系重构,在经济金融、司法审判、食品追溯、商业贸易、公共信用等领域已有广泛应用。但在规划、建设、运维区块链的同时,也需要全面评估与防范区块链应用带来的安全隐患。 …

【C语言】fork函数使用

在 UNIX 和类 UNIX 系统中,`fork()` 是用于创建新进程的系统调用。它将当前进程(父进程)复制一份,创建一个新的子进程。`fork()` 调用返回两次:一次在父进程中,并返回子进程的进程ID;一次在子进程中,并返回值 0。可以通过对这些返回值进行判断,决定接下来在父进程和子…