Pandas知识点

导入:

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

python df指定行 python如何定义df_python


打印数据的数据结构

python df指定行 python如何定义df_数据分析_02


显示数据的形状(行、列)/每一列索引

/通过索引输出一列/查看列数据类型

python df指定行 python如何定义df_数据分析_03

Series结构

python df指定行 python如何定义df_数据分析_04

python df指定行 python如何定义df_数据分析_05

python df指定行 python如何定义df_数据分析_06

dataframe

创建dataframe

python df指定行 python如何定义df_python_07


python df指定行 python如何定义df_数据分析_08


python df指定行 python如何定义df_数据_09


基本操作

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

python df指定行 python如何定义df_python_10

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

python df指定行 python如何定义df_python_11

#获取列
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'}

运行结果截图:

python df指定行 python如何定义df_python df指定行_12

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

python df指定行 python如何定义df_缺失值_13

关于索引

以梁山108将为例

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

python df指定行 python如何定义df_缺失值_14

#查找表格头五个数据
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不包含

python df指定行 python如何定义df_python_15


python df指定行 python如何定义df_python df指定行_16


python df指定行 python如何定义df_数据_17

#重新索引--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

python df指定行 python如何定义df_python_18


python df指定行 python如何定义df_python df指定行_19


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)

python df指定行 python如何定义df_python_20


numpy数学函数

python df指定行 python如何定义df_数据_21


python df指定行 python如何定义df_数据_22

排序

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

python df指定行 python如何定义df_数据_23

#按行根据拼音排序(默认升序)
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']#指定第二个排序方式

python df指定行 python如何定义df_python_24

处理缺失值

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

python df指定行 python如何定义df_缺失值_25

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

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

python df指定行 python如何定义df_数据_26


处理方式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合并问题

python df指定行 python如何定义df_python df指定行_27

#读取数据
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 条件
示例

python df指定行 python如何定义df_数据分析_28

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

查询数据
select 字段名 from 表名 where 条件
示例

python df指定行 python如何定义df_python_29


可对以上示例 进行限制筛选结果条数


python df指定行 python如何定义df_缺失值_30


模糊查询


name LIKE…


python df指定行 python如何定义df_python df指定行_31

正则表达式

数字

python df指定行 python如何定义df_数据_32


python df指定行 python如何定义df_数据_33


字符串

python df指定行 python如何定义df_python_34