第五讲 Pandas

Pandas是基于Numpy构建的更高级的数据结构和分析能力的工具包。
核心数据结构:
Series和DataFrame
Series是定长的字典序列
Series基本属性:index和value

import pandas as pd
from pandas import Series,DataFrame
x1 = Series([1,2,3,4])
x2 = Series(data=[1,2,3,4],index=['a','b','c','d'])
d = {'a':1, 'b':2, 'c':3}
x3 = Series(d)
print(x1)
print(x2)

DataFrame类似于数据库表,可看成相同index的Series组成的字典类型。

data = {'Chinese':[66,77,88,67,99],
       'English':[77,88,77,66,77],
       'Math':[88,99,88,78,87]}
df1 = DataFrame(data)
df2 = DataFrame(data,index=['zf','gy','zy','hz','dw'], #行索引
                columns=['English','Math','Chinese']) #列索引
print(df1)
print(df2)

输出:
在这里插入图片描述

数据的导入与导出

score=DataFrame(data)
score.to_excel('score.xlsx') #导出
score1=DataFrame(pd.read_excel('score.xlsx')) #导入

数据清洗

  1. 删除DataFrame中不必要的列和行
df2=df2.drop(["zf"]) #默认删除行index
df2=df2.drop(['English'],1)#axis=1,删除列columns
  1. 重命名列名columns
df2.rename(columns ={'Chinese':'YUwen','English':'yingyu'},inplace=True)
  1. 去除重复的值
df = df.drop_duplicates() #去除重复的行,index相同,数据也一样
  1. 格式问题
    更改数据格式
df2['Chinese'].astype('str')
import numpy as np
df2['Chinese'].astype(np.int64)

删除符号

df2['Chinese'].astype('str') #先将字段中的int值转化为string
df2['Chinese']=df2['Chinese'].map(str.strip) #删除左右两边的空格
df2['Chinese']=df2['Chinese'].map(str.lstrip)
df2['Chinese']=df2['Chinese'].map(str.rstrip)
df2['Chinese']=df2['Chinese'].str.strip('7')#删除字段中的某个字符

大小写转化

df2.columns=df2.columns.str.upper() #全部大写
df2.index=df2.index.str.lower() #全部小写
df2.columns=df2.columns.str.title() #首字母大写

查找空值
用Pandas的isnull函数进行查找

df.isnull() #表中哪里有空值,bool
df.isnull().any() #哪列有空值,bool

用apply函数对数据进行清洗

df['name']=df['name'].apply(str.upper) #对某列数值进行大写转化

定义函数,在apply中使用

def double_df(x): 
    return 2*x
df['Chinese']=df["Chinese"].apply(double_df) #简单函数

def plus(df,n,m):
    df['new']=df['Chinese']*n+df['English']*m
    return df
df=df.apply(plus,axis=1,args=(2,3)) #axis=1按列为轴进行操作,传递两个参数

数据统计

在这里插入图片描述
数据合并

df1=DataFrame({'name':['zf','gy','a','b','c'],'data1':range(5)})
df2=DataFrame({'name':['zf','gy','x','y','z'],'data2':range(5)})
df3=pd.merge(df1,df2,on='name') #基于指定列连接
df4=pd.merge(df1,df2,how='inner') #inner内连接,键的交集
df5=pd.merge(df1,df2,how='left') #left左连接,第一个表为主
df6=pd.merge(df1,df2,how='right') #right右连接,以第二个表为主
df7=pd.merge(df1,df2,how='outer') #外连接,求并集

用SQL方式打开Pandas

打开cmd运行:pip install pandasql
在这里插入图片描述

import pandas as pd
from pandas import DataFrame
from pandasql import sqldf,load_meat,load_births
df1=DataFrame({'name':['zf','gy','a','b','c'],'data1':range(5)})
pysqldf=lambda sql:sqldf(sql,globals())
sql="select * from df1 where name='zf'"
print(pysqldf(sql))

运行结果:
在这里插入图片描述

lambda argument_list: expression

lambda定义匿名函数,上例中输入参数为sql,返回函数sqldf对sql的运行结果。

练习题

创建数据表并清洗,新增一列总和,计算三科成绩之和。
在这里插入图片描述

df=DataFrame({'Chinese':['66','95','95','90','80','80'],
             'English':['65','85','92','88','90','90'],
             'Math':['','98','96','77','90','90']},index=['zf','gy','zy','hz','dw','dw'])

df=df.drop_duplicates()# 去除重复值
df.rename(columns={'Chinese':'语文','English':'英语','Math':'数学'},inplace=True) #将英文换成中文

df1=DataFrame(pd.read_excel('C:\\Users\\五月\\Desktop\\text.xlsx')) #读取创建的表格
df1=df1.drop_duplicates() # 去除重复值
df1.isnull().any() #判断哪列有空值
df1['数学'].fillna(df1['数学'].mean(),inplace=True) #用平均值来填补空值
def sum_score(df): #定义和函数
    df1['总分']=df1['语文']+df1['数学']+df1['英语']
    return df
df1=df1.apply(sum_score,axis=1) #按列运行函数

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值