pandas对excel表格的部分操作总结(持续更新)

前言

之前参加过数学建模比赛,其中用到了一些Python关于表格处理的方法,想着给总结一下,方便日后查看。
水平有限,如有错误,还请指正。

导入pandas库

首先使用pip命令安装pandas()函数库,接着使用import命令即可导入使用

pip install pandas
#导入pandas库并且起个别名为pd
import pandas as pd

read_excel()函数的参数

函数参数众多,有些我也不是特别了解(QAQ),这里仅对其中部分参数做出解释,如有错误,欢迎指正。

def read_excel(io,#路径对象或类似文件的对象
               sheet_name=0,#指定选择的excel表格名字
               header=0,#指定标题行
               names=None,#要使用的列名列表
               index_col=None,#指定列索引
               parse_cols=None,
               usecols=None,#指定要选择读取数据的列号,如果是None,表示读取所有列
               squeeze=False,
               dtype=None,#指定数据类型
               engine=None,
               converters=None,
               true_values=None,
               false_values=None,
               skiprows=None,#跳过指定行的数据
               nrows=None,
               na_values=None,
               keep_default_na=True,
               na_filter=True,
               verbose=False,
               parse_dates=False,
               date_parser=None,
               thousands=None,
               comment=None,
               skip_footer=0,
               skipfooter=0,
               convert_float=True,
               mangle_dupe_cols=True,
               **kwds)

一些实例

测试使用的excel表格数据
在这里插入图片描述

整体读取表格数据

import pandas as pd
#注意左斜杠写一个即可,右斜杠需要些两个
filepath='xxx/xxx/xxx.xlsx'
#路径可以是相对路径,也可以是绝对路径
data=pd.read_excel(filepath)
data

当只读取一个Sheet的时候,read_excel函数返回的是DateFrame类型的数据。这是一种表格数据类型。

结果:
Alt

对filepath格式的解释

有的同学可能会很疑惑,有时候将电脑上显示的路径直接复制过来,运行直接报错。这是为什么呢?
在这里插入图片描述
我们可以发现,电脑上的路径分隔符是’‘,但是’‘在Python中是一个转义符号,直接将他写入字符串的话,Python在编译的时候或产生错误,比如这个例子,在语法中是不存在’\j’的,因此会报错。
解决办法:

  1. 遵照Python的语法,将右斜杠改为左斜杠
  2. 将每个右斜杠写两遍,如:“xxx\\xxx\\xxx.xlsx”,表示显式不转义
  3. 在filepath字符串开头写一个r,表示强制不转义。
    如:filepath=r"xxx\xxx\xxx.xlsx"

将结果转换为数组格式

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx")
data=np.array(data)
print(data)

结果:

结果

对标题行的指定

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx",header=None)
data

结果:
在这里插入图片描述
可以看到,如果标题行参数header为None的时候,Python默认选取从0开始的一串数字来作为标题行,而将原本的列名(学生编号,语文等)作为数据部分。
如果想要指定自定义的标题行的时候,需要显示指出,将参数值写成自己想要的那一行即可(Python默认第一行索引为0)。

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx",header=0)
data

对列名的指定

有的时候,我们想修改列名,这个时候就需要使用参数names

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx",header=0,names=list('ABCDEFGHI'))
data

结果:
在这里插入图片描述
可以看到之前的列名现在已经别修改为了A~I,要注意列名的数量和实际的列数量要一致,否则会产生错误。

指定列索引

在默认情况下,Python都是默认指定从0开始的列索引
在这里插入图片描述
在实际的情况下,我们是可以更改列索引的,这个时候需要指定index_col参数

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx",header=0,index_col=0)#指定第0列为索引
data

在这里插入图片描述
可以看到之前的第1列(Python的列索引是从0开始),现在作为了索引。

指定列获取数据

有的时候我们只想获取某些列的数据,这个时候就需要指定usecols参数

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx",header=0,usecols=[0,2,4,6,8])#指定获取下标为0,2,4,6,8列的数据
data

结果:
在这里插入图片描述
现在我们只获取了指定列(0,2,4,6,8列)的数据

其他的一些处理手段

由于Python对表格数据处理的手段非常多,下面只列出了一小部分。
之后有时间会不定期更新。

多角度获取数据1

#注:一下所说的获取第n行数据均指Python中的索引值
import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx",header=0)
print(data.values)#获取全部数据,返回类型是一个二维数组
print(data.index.values)#获取行索引
print(data.columns.values)#获取列索引
print(data.values[i,j])#获取第i行第j列的数据
print(data.values[i])#获取第i行的数据
print(data.values[[i,j,k]])#获取第i,j,k行数据
print(data.values[:,i])#获取第i列的数据
print(data.values[:,[i,j,k]])#获取第i,j,k列的数据

多角度获取数据2

#注:一下所说的获取第n行数据均指Python中的索引值
import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx",header=0)
print(data.shape)#获取整体数据的行数和列
print(data.head(4))#只获取前四行数据
print(data.tail(4))#只获取最后四行数据
print(data.info())#直接获取一个完整的表格数据分析,更快一点

多角度数据处理3

数据替换replace函数

为了更清楚地看清效果,我们先手动将历史这一栏的数据修改一下。
在这里插入图片描述

替换一个值

方法一:

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx")
#将历史这一列中,数据是94的修改为90
#注意如果是字符串则需要添加引号
data=data.replace({'历史':{94:90}})
data

方法二:
注意这里需要在data中指定需要替换的列名

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx")
data['历史']=data['历史'].replace(to_replace=94,value=90)#to_replace指定需要更换的数据,value指定更新后的数据
data

两种方法结果都是一样的
修改效果如下:
在这里插入图片描述

替换多个值

方法一:

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx")
data=data.replace({'历史':{94:84,95:85}})
data

方法二:

import pandas as pd
import numpy as np
data=pd.read_excel("test.xlsx")
data['历史']=data['历史'].replace(to_replace=[94,95],value=[84,85])
data

将数据存放回excel表格

情形一(普通保存)

pandas提供了to_excel函数将数据保存至excel表格中

import pandas as pd
import numpy as np

data=pd.read_excel("test.xlsx")
data.to_excel("test.xlsx",sheet_name='results')#指定路径和写回的表格的名称

注:只能将DataFrame类型的数据存放到表格中,二维数组不行,必须要转换。转换的一个方法如下:

import pandas as pd
import numpy as np

data=pd.read_excel("test.xlsx")
data=np.array(data)#将DataFrame转为二维数组
data=pd.DataFrame(data)#将二维数组转换为DataFrame
data.to_excel("test.xlsx",sheet_name='results')

情形二(对数据进行简易条件判断后保存)

有的时候,我们获取数据后,提取出某一列满足某个条件的数据后,再将这些数据保存到excel表格中。
如:我们想获取数学成绩大于80分的学生,并将这些学生保存到excel表格中.
这种情况下,可以采用以下的方法:

import pandas as pd

data=pd.read_excel("test.xlsx")
print(data)
data=data[data['数学']>80] #提取出数学成绩大于80的学生数据
data.to_excel("1.xlsx",index=False) #设置index,指定讲dataframe的第一列作为excel表格中的第一列。

原始数据(test.xlsx):
在这里插入图片描述
提取后数据(1.xlsx)
在这里插入图片描述
这里注意一个细节,如果不设置index的话,pandas会自动给我们设置一个列索引,效果如下图所示,而这通常不是我们想要的,因此,可以显式取消默认的列索引。

情形三(对数据进行处理后排序保存)

有时候,我们获取数据后,不但想要对其进行筛选后保存,并且又想对数据按照我们的想法进行排序。这时候就需要用到pandas中的sort_values方法。
使用方法如下:

import pandas as pd

data = pd.read_excel("test.xlsx")
print(data)
data = data[data['数学'] > 80]  # 提取出数学成绩大于80的学生数据
data.sort_values(by='数学', inplace=True, ascending=False)  
data.to_excel("1.xlsx", index=False)  # 设置index,指定讲dataframe的第一列作为excel表格中的第一列。

对参数的解释:

  1. by参数用于指定一个列进行排序(这里指定按照数学一列的数据进行排序)
  2. inplace参数默认为False,如果该值为True,那么就会在当前的dataframe上操作。
  3. ascending默认为True,表示从大到小排序,如果改为False表示从小到大排序。
    原始数据(test.xlsx):

在这里插入图片描述
提取后数据(1.xlsx)
在这里插入图片描述
可以看到确实是按照数学这一项的数据,从大到小进行排序,效果符合预期。

inplace参数的效果:

对DataFrame进行输出:
在这里插入图片描述
设置inplace参数为True,排序后,DataFrame改变
在这里插入图片描述
设置inplace参数为False,排序后,DataFrame不改变
在这里插入图片描述
可以理解为,设置inplace参数为True,对DataFrame的修改是“永久的”,而设置inplace参数为False,对DataFrame的修改是“暂时的”。

因此,如果涉及到排序后保存或者在其他地方继续使用,则需要设置参数inplace为True。

  • 25
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值