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()其他的參數您可以參考:

如果您有任何問題,歡迎與我進行交流!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM