添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

pandas.read_excel()参数知多少?

问题:

利用pandas读入数据时,经常是通过pd.read_excel(r'path.xlsx')但有时,可能只需要表格中的某些列,当读入整张表格后,再通过索引选取需要的列,例如某个数据处理过程可能只需要['班级', '姓名', '语文']这三列数据。

按以前的习惯代码可能就写成如下:

import pandas as pd
df = pd.read_excel(r'成绩.xlsx')
new_df = df[['班级', '姓名', '语文']]

其实可以通过设置pd.read_excel()的参数直接实现,这样如果数据量很大时,还可以省下很多内存。(可通过sys模块中getsizeof(o)查看对象所占内存)

import pandas as pd
df = pd.read_excel(r'成绩.xlsx', usecols=range(3)) 

在处理数据时,了解其自身参数,并充分利用,可以带来一些好处,比如节省内存等等,那下面的介绍将从3个方面去介绍:

  • 如何设置参数选取特定列
  • 如何设置参数选取特定行
  • 关于数据转换的一些参数

1.usecols的取值可以是哪些类型?

usecols 值可以为:(None, str , list, callable)

None: 默认值,返回所有列

str: ‘A:C' 或者 ’A,B,C' ,excel中所选取的列所对应的字母

df = pd.read_excel(r'成绩.xlsx', usecols='A:C'**)

list: 可以为列数的集合或者列名的集合

df = pd.read_excel(r'成绩.xlsx', usecols=[0,1,2]**)

df = pd.read_excel(r'成绩.xlsx', usecols=['班级', '姓名', '语文']**)

callable: 函数,返回列名符合某些条件的那些列,比如返回**列名**中包含语文和数学的那些列

df = pd.read_excel(r'成绩.xlsx', usecols=lambda x: x in ['班级', '姓名', '语文']) # 有点类似apply的意思

备注:0.24版本之前,int:表示选取前**int+1**列,0.24之后被舍弃了,可以用[0,1,2,..,int]或者range(0, int+1)

2. 了解完了选取某些列之外,那关于如何 选取某些行 的参数有3个:

nrows : int,表示选取前n行

df = pd.read_excel(r'成绩.xlsx', nrows=1)

skipfooter :int,表示从最后一行开始,不读取n行

df = pd.read_excel(r'成绩.xlsx', skipfooter=2) # 表示

skiprows : list-like,表示不读取某些行

df = pd.read_excel(r'成绩.xlsx', skiprows=range(1, 100, 2)) # 只读取偶数行

3.除了以上关于行或列的操作,还有一些数据转换的参数:

dtype: 转换某些列的数据类型

type_name: 设置所有的列为type_name,若出现不能转换的类型,会报错;

df = pd.read_excel(r'成绩.xlsx', dtype=int) # 会报错,因为不能将字符串转换成int

字典:{col _ name: type _ name,...}

df = pd.read_excel(r'成绩.xlsx', dtype={'班级': str, '数学': float})

convert_float: 是否将 float类型的整型 (20.00)转换成int类型(20),默认值为True

备注:若某列数字包含真正的浮点数比如(20.01),那么该列将不会被转换(参考下图)

df = pd.read_excel(r'成绩.xlsx', convert_float=True)
df = pd.read_excel(r'成绩.xlsx', convert_float=False)

parse_dates与date_parser: 通过设置parse_dates参数,可以在数据读入的时候将字符串格式的数据转换成日期格式;而date_parser参数则是进行日期转换的引擎(或者叫函数)

parse_dates:

布尔值:值为True,解析index列

列表:列名或者列数--['col_name','col_name',..] or ['col_num1, col_num2,...] ,同时将多列字符串格式转换成日期格式

列表:列表的列表 ---[['col_name','col_name2']] or [['col_num','col_num2']],将列表中的多列,合并一个日期格式

字典:{'str': ['col_name','col_name2',..]} 为新合并的日期列指定一个新的列名'col_name'

date_parser:function,默认调用 dateutil.parser.parser 进行解析日期,具体解析哪些列取决于parse_dates指定的参数。因为此值可以为函数,所以可以进行自定义。

例如:如下格式的日期,利用data_parser的默认值并不能进行成功转换,所以可以date_parser 结合 pd.to_datetime()进行定义函数可以进行转换

df = pd.read_excel(r'日期.xlsx', parse_dates=['date'], date_parser=lambda x: pd.to_datetime(x, format='%Y%m')

converters: 当然了,上述日期转换也可以通过设置converters也可以实现:converters意思就是将某个函数应用到某列上。

df = pd.read_excel(r'日期.xlsx', sheet_name='Sheet1', converters={'date': lambda x: pd.to_datetime(x, format='%Y%m')})

至此,本篇文章涉及到了以下几个方面:

  1. 如何选取某些特定的列,其所用到的参数为:usecols
  2. 如何选取某些特定的行,其所用到的参数为: skipfooter, skiprows, nrows
  3. 数据格式的设定:dtype 与 convert_float
  4. 日期格式的转换: parse_dates 与 date_parser
  5. 某些特定列的各种转换:converters(包括日期,数据类型等)

关于pd.read_excel()其他的参数您可以参考:

如果您有任何问题,欢迎与我进行交流!

水平有限,若有错误,欢迎指正!

编辑于 2019-12-11 13:59