Pandas基本操作记录

这篇博客主要记录pandas库的一些基本操作,主要包括:
读写excel数据、介绍Series与DataFrame、查看列名/索引/数据类型、排序、筛选、重置索引

导入头文件

import pandas as pd
  • 主要用到的库就是pandas

读取xlsx文件

df = pd.read_excel('数据分析.xlsx','Sheet1')
  • 新版本的excel生成的文件后缀一般都是.xlsx,老版本是.xls,使用pandas库的read_excel函数可以读取其中的数据。类似的,读取csv函数使用pd.read_csv函数
  • 该函数常用的参数是文件路径(即’‘数据分析.xlsx’’)和表名(即’‘Sheet1’’)

pd.read_excel函数原型及常用参数:

pd.read_excel(io, sheetname=0,header=0,skiprows=None,index_col=None,names=None,
                arse_cols=None,date_parser=None,na_values=None,thousands=None, 
                convert_float=True,has_index_names=None,converters=None,dtype=None,
                true_values=None,false_values=None,engine=None,squeeze=False,**kwds)
  • io:excel文件路径
  • sheetname:表名,也可以传入数字索引,默认为0。传入一个列表可得到多表,传入None可以得到全表,此时会返回一个字典
  • header:指定作为列名的行
  • index_col:指定作为索引(行名)的列

read_excel函数的返回值:DataFrame

pd.read_excel读取excel得到一个返回值,数据类型是DataFrame。我们想对一张表格进行处理,其实就是对这个DataFrame进行一系列操作,在了解DataFrame之前,还需要了解pandas里另一个基本的数据结构Series.简单来说:

  • Series就是带索引的一列(或者是一行)数据,或者说是一个带自定义索引的数组,索引是可重复的。可以用以下函数创建:
a = pd.Series(['张三','李四','王五'],index=['壹','贰','叁'])

series张三、李四、王五是这个Series的内容,‘壹’,‘贰’,'叁’则是它的索引,也可以不指定索引,这样会使用默认的索引0,1,2…。类似于数组/列表,可以使用索引来访问Series的内容,比如a[‘壹’]就是‘张三’。事实上根据这种对应关系可以猜到,也可以用一个字典作为参数创建一个Series。

  • DataFrame也是一种数据结构,可以看成是由很多个Series组成的,在横纵方向上都有索引。正如使用read_excel函数可以将excel文件存入DataFrame,DataFrame的结构和一张excel表的结构十分类似,excel表的横向最上方是英文字母ABCDEFG…纵向最左方是数字1234567…这样就可以用字母+数字定位一个单元格,比如A1就是左上方那个格子。DataFrame也是一样,含有对列的索引,叫做列名(columns);含有对行的索引,就叫做索引(index)。可以用以下函数创建一个DataFrame:
df1 = pd.DataFrame([[1,2,3,4],['一','二','三','四']],index=[1,2],columns=['A','B','C','D'])
#使用二维'数组'
df2 = pd.DataFrame({'A':[1,2,3,4],'B':[5,6,7,8]})
#使用字典

df

查看列名、索引及数据类型

使用 df.columns 查看列名
使用 df.index 查看索引

注意返回的类型是pandas.core.indexes.base.Index,可以转换成我们更熟悉的列表
index注:使用df.rename(columns={‘替换前’:‘替换后’},inplace=True)可以更改列名

使用 df.dtypes 查看(每一列的)数据类型
object 类似于 str,其他类型有 int64、float64 等

In[]:df1.dtypes
Out[]:
A    object
B    object
C    object
D    object
dtype: object

储存DataFrame为excel文件

前面说过,使用 read_excel 函数读取excel文件返回了一个DataFrame,现在假设我们已经完成了需要的操作,DataFrame已经变成了我们需要的样子,那么,怎么将其储存为 excel 文件呢?可以使用 df 的to_excel函数。为了方便使用,我已经将它封装成一个函数:

def save_as_excel(df,xlsx_name='a.xlsx',sheet_name='sheet1',startrow=0,startcol=0):
    """
    功能是保存一个df对象为excel文件(xlsx)
    df:要保存的dataFrame对象
    xlsx_name:要保存的名字,注意加上后缀
    sheet_name:要保存的表的名字
    """
    writer=pd.ExcelWriter(xlsx_name)
    df.to_excel(writer,sheet_name = sheet_name,startrow=startrow,startcol=startcol,index=False)
    writer.save()#需要加上这一行,否则无法生成文件

排序

在 excel 中排序并不难,可以 “右击-排序” 或者 “数据-排序” ,在python/pandas中对一个DataFrame的某一列数据进行排序,可以使用 sort_values 函数:

df = df.sort_values(by=sort_by,ascending=False)

第一个参数显然是排序的依据(列名),是一个字符串或列表
第二个参数 ascending 控制升序还是降序,ascending = False表示降序,=True表示升序。该参数默认是True

筛选

筛选也是非常常用的功能,但是在pandas中第一次使用可能并不习惯:

df = df[df的筛选条件]

举个例子:
grade
对于这样一个DataFrame,如果想要筛选出一班的成绩,代码是这样写的:
筛选 更高级的一些写法:

  • df[(df.班级=='1班')|(df.班级=='2班')] 使用逻辑关系构造多个条件进行筛选
  • df[df.班级.isin(['1班','2班'])]使用列表进行筛选,用到了isin()方法
  • df[df.班级.str.contains('班')] 使用字符串的contains()方法通过字符串进行筛选

注意,并不存在 isnotin 的写法,需要反选用的是:df[~df.班级.isin(['1班','2班'])]

重置索引

无论是排序还是筛选,得到的DataFrame索引仍是原来的,并没有从零开始重新排列,以筛选为例:
索引重置
可以看出来索引是从8、9、10而不是0、1、2,这在某些场合会造成错误,如果需要重置索引,只需要使用df = df.reset_index(drop=True)其中drop=True的作用是丢弃原来的索引,否则dataframe会在最左边第一列自动生成一列(index)用于储存原来的索引。

index在筛选之后操作dataframe很容易出现index out of range的情况,很有可能就是索引没有重置引起的。

groupby

groupby函数实现了类似excel中数据透视表的功能, 常用格式
df = df.groupby([col1, col2, ...])[col3, col4, ...].sum()
注意:

  • 如果不想聚合项(col1, col2, …)直接变成索引,应该在最后加上reset_index(), 但是不要drop,否则聚合项会被丢弃
  • 如果想对不同的列应用不同的聚合函数,那么应该使用agg方法
df  = df.groupby([col1, col2, ...]).agg(
		{'col3':'max', 'col4':'mean',...}
	)

参考资料:

  • https://blog.csdn.net/weixin_44056331/article/details/89342217
  • https://www.cnblogs.com/654321cc/p/9302370.html
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值