Python-Pandas知识点整理

Pandas知识点

导入:

import pandas as pd
df=pd.read_excel("data/梁山108将.xlsx")
#导入excel表格

执行结果
打印数据的数据结构
在这里插入图片描述
显示数据的形状(行、列)/每一列索引
/通过索引输出一列/查看列数据类型
在这里插入图片描述

Series结构

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

dataframe

创建dataframe
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基本操作

#创建
data=[{'座次':'1','姓名':'宋江'},{'座次':'2','姓名':'卢俊义'},{'座次':'3','姓名':'吴用'}]
df=pd.DataFrame(data,index=['rank1','rank2','rank3'])
#新建列
df['绰号']=['及时雨','玉麒麟','智多星']

在这里插入图片描述

#修改列
df['绰号']=['呼保义','玉麒麟','智多星']

在这里插入图片描述

#获取列
df['姓名']
#删除列
del df['绰号']

删除列:
del 直接删除源数据,没有返回值
df.pop() 直接删除源数据,返回删除的series
df.drop() 不删除源数据

#获取行
df.loc['rank1']  #返回的是转置后的series,为了方便操作
#通过整数值索引--iloc
rank2=df.iloc[1]
#添加行
df.loc['rank4'] = ['4','公孙胜','入云龙']
#or 
df.loc['rank5'] = {'姓名':'关胜','绰号':'大刀','座次':'5'}
#修改行
df.loc['rank4']={'姓名'::'关胜','绰号':'大刀关胜','座次':'4'}

运行结果截图:
运行结果

#删除行
df1 = df.drop(index = ['rank3','rank5'])  #drop方法会保留源数据
df1 = df.drop(index = ['rank3','rank5'],inplace=True) #不保留原始数据

在这里插入图片描述

关于索引

以梁山108将为例

#导入数据
df=pd.read_excel("data/梁山108将.xlsx")

在这里插入图片描述

#查找表格头五个数据
df.head()
#后五个
df.tail()
#行索引
df.index()
#列索引
df.columns()
#获取前10行数据
df[0:11]
#获取一列
df['姓名']
#获取多列
df['姓名','绰号','梁山泊职位']

#获取指定行列信息
df.loc[5:10,['姓名','绰号']
#获取一段范围内的列
df.loc[5:10,'姓名':'梁山泊职位']
#or
df.iloc[5:10,1:4]

! 注意loc和iloc的区别,取范围时loc包含最后一个,iloc不包含
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#重新索引--reindex
df.reindex(columns=['绰号','姓名'])#可以任意调换顺序
df.reindex(index=[9,99],columns=['绰号','姓名'])

算数运算

1·Series

s1=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
s2=pd.Series([11,12,13,14,15],index=['a','b','c','d','e'])
s=s1+s2#将对应index的数相加,无对应显示为NaN

在这里插入图片描述
在这里插入图片描述
2·DataFrame

#创建一个临时数组
import numpy as np
df1=pd.DataFrame(np.arange(9).reshape(3,3),index=['宋江','李逵','武松'],columns=['语文','数学','英语']
df2=pd.DataFrame(np.arange(9).reshape(3,3),index=['宋江','李逵','武松'],columns=['语文','数学','物理']
#相加
df1['总成绩']=df1['语文']+df1['数学']+df1['英语']
#or
df=df1.add(df2,fill_value=0)#将空值赋为0

加法add,减法sub,乘法mul,除法 div

函数运用

#创建数列
import numpy as np
import pandas as pd
df1=pd.DataFrame(np.arange(9).reshape(3,3),index=['宋江','李逵','武松'],columns=['语文','数学','英语']
#使用numpy通用函数

#获取列最大数
np.max(df1)
#获取行最大数
np.max(df1,axis=1)

在这里插入图片描述
numpy数学函数
在这里插入图片描述
在这里插入图片描述

排序

#将名字转换为拼音重新排序
df1.rename({'宋江':'songjiang','李逵':'likui','武松':'wusong'},axis='index')
#参数axis取值0/index--列,1/columns--行
#转换后是否取代inplace
df1.rename({'宋江':'songjiang','李逵':'likui','武松':'wusong'},axis='index',inplace=True)

在这里插入图片描述

#按行根据拼音排序(默认升序)
df1.sort_index()
#降序ascending
df1.sort_index(ascending=False)

#按列排序
#重命名
df1.rename({'语文':'yuwen','数学':'shuxue','英语':'yingyu'},axis=1,inplace=True#按行升序
df1.sort_index(axis=1)
#按行降序
df1.sort_index(axis=1,ascending=False)

#根据值进行排序
df1.sort_values(by=['shuxue'])
df1.sort_value(by=['shuxue','yingyu']#指定第二个排序方式

在这里插入图片描述

处理缺失值

df1['yingyu'] = [np.nan,5,8]#将列表一格数据删除

在这里插入图片描述

#查找缺失值
df1.isnull()#返回值为True的为缺失值
#or
df1.notnull()#返回值为False的为缺失值

#查看对数据的概括(也可以查看哪一个因素缺少了值)
df1.info()

在这里插入图片描述
处理方式1:删除缺失值

df1.dropna()#把包含缺失值的整行删除
df1.dropna(axis=1)#把包含缺失值的整列删除
df1.dropna(how='all')#删除整行都为nan的 其他不删

2·填充缺失值

df1.fillna(0)#将缺失值填充为0,但误差会很大
df1.fillna(df1.mean() )#将缺失值填充为数组的平均值

读取和存储数据

#读取豆瓣电影排名前250的文件
movies = pd.reaad_csv('douban20.txt',
sep='|',		#sep添加分隔符
encoding="utf-8-sig",	#转换数据类型 解决乱码问题
header=None,	#把第一行不作为索引
names = ['电影名','评分','评论数']	#添加索引
nrows = 10,		#读取前十行
na_value=0,		#用0替换缺失值
skiprows=10,	#跳过读取前十行
)

#添加索引方法2
movies.columns=['电影名','评分','评论数']
#存储文件
movies.to_csv('douban250.txt')

merge合并问题

在这里插入图片描述

#读取数据
zoo = pd.read_csv('Data/zoo.csv')
zoo_eat = pd.read_csv('Data/zoo_eat.csv')

#交集
pd.merge(zoo,zoo_eat)
#or
pd.merge(zoo,zoo_eat,on='animal',how='inner')

#并集
pd.merge(zoo,zoo_eat,left_on='animal',right_on='animals',how='outer')
#并集会出现很多缺失值
pd.merge(zoo,zoo_eat,left_on='animal',right_on='animals',how='outer').fillna(0)

#左联
pd.merge(zoo,zoo_eat,left_on='animal',right_on='animals',how='left')
#右联
pd.merge(zoo,zoo_eat,left_on='animal',right_on='animals',how='right')

concat连接

zoo1 = pd.concat([zoo,zoo_eat])
#如果列索引不同,合并后会自动扩充列

zoo1 = pd.concat([zoo,zoo_eat],
axis=1,		#按行合并
ignore_index = True  #解决行索引不连续问题
)

去重

data = pd.contat([zoo,zoo_eat])
data.drop_duplicate(inplace=True)#加上inplace,保存修改
#等价于
data.drop_duplicate(inplace=True,keep='forst')#保留重复数据中位于上面的数据
data.drop_duplicate(inplace=True,keep='last')#保留下面的数据
data.drop_duplicate(subset=['animal','water_need'],inplace=True,keep='last')
#subset 表示只去掉指定列的重复数据的对应行

Pandas与MySQL

#连接MySQL
import pymysql
conn = pymysql.connect(
host='localhost',
user='root',
password='admin123',
db='world',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)

#pandas连接
import pandas as pd
data = pd.read_sql('select * from citl',conn)

#另一种连接方式
import pymysql
from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('mysql+pymysql://root:admin123@localhost:3306/world')
conn = engine.connect()
data = pd.read_sql('select * from city',conn)

#关闭连接
conn.close()

MySQl查询语句大全 https://www.cnblogs.com/mofujin/p/11355517.html

MySQL基础语句

插入数据
insert into 表名(字段名1,字段名2)VALUES(字段值)

删除数据
delete from 表名 where 条件
示例 在这里插入图片描述

修改数据
update 表名 set 字段赋值 where 条件

查询数据
select 字段名 from 表名 where 条件
示例在这里插入图片描述
可对以上示例 进行限制筛选结果条数
在这里插入图片描述
模糊查询
name LIKE…
在这里插入图片描述

正则表达式

数字
在这里插入图片描述
在这里插入图片描述
字符串
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值