pandas.read |
您所在的位置:网站首页 › pandaread_excel › pandas.read |
问题: 利用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()进行定义函数可以进行转换 converters: 当然了,上述日期转换也可以通过设置converters也可以实现:converters意思就是将某个函数应用到某列上。 df = pd.read_excel(r'日期.xlsx', sheet_name='Sheet1', converters={'date': lambda x: pd.to_datetime(x, format='%Y%m')})至此,本篇文章涉及到了以下几个方面: 如何选取某些特定的列,其所用到的参数为:usecols如何选取某些特定的行,其所用到的参数为: skipfooter, skiprows, nrows数据格式的设定:dtype 与 convert_float日期格式的转换: parse_dates 与 date_parser某些特定列的各种转换:converters(包括日期,数据类型等)关于pd.read_excel()其他的参数您可以参考: 如果您有任何问题,欢迎与我进行交流! 水平有限,若有错误,欢迎指正! |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |