1. 程式人生 > 其它 >pandas之excel操作

pandas之excel操作

Excel 是由微軟公司開發的辦公軟體之一,它在日常工作中得到了廣泛的應用。在資料量較少的情況下,Excel 對於資料的處理、分析、視覺化有其獨特的優勢,因此可以顯著提升您的工作效率。但是,當資料量非常大時,Excel 的劣勢就暴露出來了,比如,操作重複、資料分析難等問題。Pandas 提供了操作 Excel 檔案的函式,可以很方便地處理 Excel 表格。

to_excel()

通過 to_excel() 函式可以將 Dataframe 中的資料寫入到 Excel 檔案。

如果想要把單個物件寫入 Excel 檔案,那麼必須指定目標檔名;如果想要寫入到多張工作表中,則需要建立一個帶有目標檔名的ExcelWriter物件,並通過sheet_name引數依次指定工作表的名稱。

to_ecxel() 語法格式如下:
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None) 
下表列出函式的常用引數項,如下表所示:

引數名稱描述說明
excel_wirter 檔案路徑或者 ExcelWrite 物件。
sheet_name 指定要寫入資料的工作表名稱。
na_rep 缺失值的表示形式。
float_format 它是一個可選引數,用於格式化浮點數字符串。
columns 指要寫入的列。
header 寫出每一列的名稱,如果給出的是字串列表,則表示列的別名。
index 表示要寫入的索引。
index_label 引用索引列的列標籤。如果未指定,並且 hearder 和 index 均為為 True,則使用索引名稱。如果 DataFrame
使用 MultiIndex,則需要給出一個序列。
startrow 初始寫入的行位置,預設值0。表示引用左上角的行單元格來儲存 DataFrame。
startcol 初始寫入的列位置,預設值0。表示引用左上角的列單元格來儲存DataFrame。
engine 它是一個可選引數,用於指定要使用的引擎,可以是 openpyxl 或 xlsxwriter。

下面看一組簡單的示例:
  1. import pandas as pd
  2. #建立DataFrame資料
  3. info_website = pd.DataFrame({'name': ['程式設計幫', 'c語言中文網', '微學苑', '92python'],
  4. 'rank': [1, 2, 3, 4],
  5. 'language': ['PHP', 'C', 'PHP','Python' ],
  6. 'url': ['www.bianchneg.com', 'c.bianchneg.net', 'www.weixueyuan.com','www.92python.com' ]})
  7. #建立ExcelWrite物件
  8. writer = pd.ExcelWriter('website.xlsx')
  9. info_website.to_excel(writer)
  10. writer.save()
  11. print('輸出成功')

上述程式碼執行後會自動生成 website.xlsx 檔案,檔案內容如下:


圖1:DataFrame轉為Excel

read_excel()

如果您想讀取 Excel 表格中的資料,可以使用 read_excel() 方法,其語法格式如下:
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
              usecols=None, squeeze=False,dtype=None, engine=None,
              converters=None, true_values=None, false_values=None,
              skiprows=None, nrows=None, na_values=None, parse_dates=False,
              date_parser=None, thousands=None, comment=None, skipfooter=0,
              convert_float=True, **kwds)
下表對常用引數做了說明:

引數名稱說明
io 表示 Excel 檔案的儲存路徑。
sheet_name 要讀取的工作表名稱。
header 指定作為列名的行,預設0,即取第一行的值為列名;若資料不包含列名,則設定 header = None。若將其設定
為 header=2,則表示將前兩行作為多重索引。
names 一般適用於Excel缺少列名,或者需要重新定義列名的情況;names的長度必須等於Excel表格列的長度,否則會報錯。
index_col 用做行索引的列,可以是工作表的列名稱,如 index_col = '列名',也可以是整數或者列表。
usecols int或list型別,預設為None,表示需要讀取所有列。
squeeze boolean,預設為False,如果解析的資料只包含一列,則返回一個Series。
converters 規定每一列的資料型別。
skiprows 接受一個列表,表示跳過指定行數的資料,從頭部第一行開始。
nrows 需要讀取的行數。
skipfooter 接受一個列表,省略指定行數的資料,從尾部最後一行開始。

示例如下所示:
  1. import pandas as pd
  2. #讀取excel資料
  3. df = pd.read_excel('website.xlsx',index_col='name',skiprows=[2])
  4. #處理未命名列
  5. df.columns = df.columns.str.replace('Unnamed.*', 'col_label')
  6. print(df)
輸出結果:
           col_label     rank    language          agelimit
name                                                 
程式設計幫           0         1        PHP       www.bianchneg.com
微學苑           2         3        PHP       www.weixueyuan.com
92python        3         4        Python    www.92python.com
再看一組示例:
  1. import pandas as pd
  2. #讀取excel資料
  3. #index_col選擇前兩列作為索引列
  4. #選擇前三列資料,name列作為行索引
  5. df = pd.read_excel('website.xlsx',index_col='name',index_col=[0,1],usecols=[1,2,3])
  6. #處理未命名列,固定用法
  7. df.columns = df.columns.str.replace('Unnamed.*', 'col_label')
  8. print(df)
輸出結果:
                   language
name      rank        
程式設計幫       1          PHP
c語言中文網   2           C
微學苑       3          PHP
92python    4         Python