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查询语句大全
MySQL基础语句
插入数据
insert into 表名(字段名1,字段名2)VALUES(字段值)删除数据
delete from 表名 where 条件
示例
修改数据
update 表名 set 字段赋值 where 条件查询数据
select 字段名 from 表名 where 条件
示例
可对以上示例 进行限制筛选结果条数
模糊查询
name LIKE…
正则表达式
数字
字符串