pandas功能和用法

在数据分析/机器学习中经常要用到几个库:numpy,scipy,pandas,matplotlib,sklearn,TensorFlow,PyTorch。其中pandas可以高效地操作大量数据集,便捷快速地处理数据。但我平时使用SQL比较多,pandas用的真的很少,所以总会忘记用法。这里对pandas的功能用法做个梳理和总结,希望能在需要用到的时候能快速上手。

 

参考文章:

(1)pandas用法总结(https://blog.csdn.net/yiyele/article/details/80605909

(2)https://blog.csdn.net/weixin_39791387/article/details/81391621

(3)拼接(类似insert into):https://blog.csdn.net/guofei_fly/article/details/85455813

(4)重命名列名:https://blog.csdn.net/Asher117/article/details/84791257/

 

0x00、样例数据介绍【自己编的示例数据】

在一个Excel表格[info.xlsx]中有两个Sheet:Student 和 Teacher,分别记录学生和教师的信息。另有两个csv文件,lesson.csv和lesson2.csv,记录学生的课程成绩信息,lesson2.csv中的部分信息与lesson.csv重复。

(1)info.xlsx 中的 “Student” 和“Teacher”表格数据:

(2)lesson.csv

(3)lesson2.csv

 

0x01、读写Excel/csv文件

1、读取(数据导入):

使用read_excel() 或 read_csv() 【可直接把Excel或csv文件转换成DataFrame格式】。

常用参数:read_excel(io,sheet_name),其中参数io表示excel文件的路径,sheet_name表示文件中的第几个sheet(sheet序号从0开始,例如1表示第二个sheet),也可以直接写sheet的名称。

我第一次读取excel文件时显示错误,查看返回的错误信息发现原因是缺少xlrd依赖包,使用pip安装上就好了。

2、写入(数据导出):

使用to_excel() 或 to_csv()写入,加上参数 “index=None” 可以去除索引。若要在同一个Excel中写入多个Sheet,需要使用ExcelWriter()方法,在写入新数据时保留原来的数据,写入完成后再关闭,参考这篇文章

第一次写入xlsx文件时又报错了,原因是缺少openpyxl依赖包,安装之后就能正常写入了。

import pandas as pd

#查看Excel中有几张表
xls = pd.ExcelFile('info.xlsx')
xls.sheet_names  

#读取Excel中的表
stu = pd.read_excel('info.xlsx', 0) #注意0指的是第一张sheet
tch = pd.read_excel('info.xlsx', sheet_name='Teacher') 
tch2 = pd.read_excel('info.xlsx', 'Teacher')  #这种写法也可以

#读取csv文件
lsn = pd.read_csv('lesson.csv')
lsn2 = pd.read_csv('lesson2.csv')


#在同一个excel中写入多个Sheet
xlswriter = pd.ExcelWriter('info2.xlsx')
lsn.to_excel(xlswriter, sheet_name='LESSONS', index=None) #写入时去除索引
tch2.to_excel(xlswriter, sheet_name='TEACHER')
xlswriter.close()

#写入csv文件
stu.to_csv('stu.csv', index=None)

 

0x02、查看数据表信息

# 维度查看
stu.shape

# 数据表基本信息(维度、列名称、数据格式、所占空间等)
stu.info()

#数据表描述性统计,列出每个字段的平均值、方差、四分位数等,round(2):保留两位小数,T:转置
lsn.describe().round(2).T 

# 每一列数据的格式
stu.dtypes

# 某一列格式
stu['ADDRESS'].dtype

# 查看空值, 若不为空会返回false
lsn.isnull()

# 查看某一列空值
stu['SEX'].isnull()

# 查看某一列的唯一值, 以数组形式返回唯一值
lsn['LESSON_GRADE'].unique()

# 查看数据表的值, 会以数组形式返回
stu.values

# 查看列名称
tch.columns

# 查看前10行数据和后10行数据
stu.head(10)
lsn.tail(10)

 

0x03、数据筛选和提取(对应SQL中的select... from...where语句)

1、数据筛选:使用大于/小于/等于、与(&)、或(|)、非(!=)等筛选数据。

2、数据提取:要有三个函数loc、iloc和ix。区别是:loc使用字符型标签来索引数据;iloc使用数字来索引数据;ix是混合索引,字符型标签和整型索引都可以使用,但应尽量少用ix。特殊情况:当dataframe的行标签或列标签为数字时,loc就可以来索引。

#数据筛选和提取
stu[1:4]  #取索引大于等于1小于4的行
stu.iloc[7,4]  #也可以:stu.ix[7,4]
stu.iloc[2:5,1:4] #取索引大于等于2小于5的行,第2个到第4个的共三个字段


#取年龄等于16岁,性别不为'F'的ID、姓名、年龄和性别字段
#select t.STU_ID,t.STU_NAME,t.AGE,t.SEX from stu t where t.AGE = 16 and t.SEX <> 'F';
stu.loc[(stu['AGE'] == 16) & (stu['SEX'] != 'F'), ['STU_ID','STD_NAME','AGE','SEX']]

#取CLASS_ID=2001 或 AGE=16 的所有字段
#select t.* from stu t where (t.CLASS_ID = 2001 or t.AGE = 16);
stu.loc[(stu['CLASS_ID'] == 2001) | (stu['AGE'] == 16)]

 

0x04、数据汇总和统计(对应SQL中的group by,order by,count(),sum()等)

#对所有列进行计数汇总
stu.groupby('SEX').count()  #也可以这样写:stu.groupby(['SEX']).count()

#对两个字段汇总
stu.groupby(['SEX','AGE'])['STU_ID']count()

#按LESSON_ID对STU_ID计数
lsn.groupby('LESSON_ID')['STU_ID'].count()

#对LESSON_ID汇总,并计算LESSON_GRADE的最大最小值、平均值、标准差
import numpy as np
lsn.groupby(['LESSON_ID'])['LESSON_GRADE'].agg([len,np.max,np.min,np.mean,np.std])

 

0x05、数据预处理和清洗

#用0填充空值
stu.fillna(value=0)

#使用列AGE的均值对NA进行填充
stu['AGE'].fillna(stu['AGE'].mean())

#清除STU_NAME字段的字符空格
stu['STU_NAME'] = stu['STU_NAME'].map(str.strip)

#大小写转换
tch2['LESSON_NAME'] = tch2['LESSON_NAME'].str.lower()

#更改数据格式
stu['AGE'].astype('float64')

#更改列名称
tch2.rename(columns={'LESSON_NAME':'LSN_NAME'})

#删除后出现的重复值
tch['LESSON_NAME'].drop_duplicates()

#删除先出现的重复值
tch['LESSON_NAME'].drop_duplicates(keep='last')

#数据替换
stu['SEX'].replace('M','Male')

 

0x06、数据表操作(union,join,转置)

# union all, 然后使用drop_duplicates()去除重复行.
# drop_dupliactes()默认选择所有列,keep参数{'first','last','False'},默认'first'
lsn3 = lsn.append(lsn2).drop_duplicates()

# join (left join / right join / inner join / outer join)
# merge: 连接tch表和lsn表,根据两张表相同的字段来连接
# how的参数{'left','right','inner','outer'}
tch_lsn = pd.merge(tch, lsn, how='left')

# 另外还有 concat 和 join 可以执行连接表的操作,后面有时间再补充

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值