1.Excel
1.1 Excel導入
read_excel()
pandas.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,
keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0,
convert_float=True, mangle_dupe_cols=True, **kwds)
read_excel()方法使用Python的xlrd
模塊來讀取Excel 2003(.xls
)版的文件,而Excel 2007+ (.xlsx
)版本的是用xlrd
或者openpyxl
模塊來讀取的。to_excel()方法則是用來把DataFrame
數據存儲為Excel格式.。(標紅參數為常用參數)
普通導入
導入 Excel 數據主要使用到的方法是 Pandas 中的 read_excel()
。
在進行導入操作的時候,要注意文件路徑,這里的文件路徑可以使用相對路徑也可以使用絕對路徑,但是不管哪種路徑最基本的是要寫對。
import pandas as pd df = pd.read_excel("result_data.xlsx")# 相對路徑 print(df) # 輸出內容 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
Windows 的操作系統,文件路徑默認是使用 \
,如 D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx
,我們在直接使用 Windows 的文件路徑的時候需要在前面增加一個 r (轉義符)避免路徑中的 \
被轉義,如下:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx") #df = pd.read_excel("D:\\Development\\Projects\\python-learning\\python-data-analysis\\pandas-demo\\result_data.xlsx") 也可以這樣 print(df) # 輸出內容 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
指定導入 Sheet
我們在使用 Excel 導入的時候,除了可以指定文件路徑,還可以選擇導入的 Sheet
在設置 Sheet 的時候,我們使用參數 sheet_name
來完成,示例如下:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='result_data') print(df) # 輸出結果 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
如果我們要使用一個完全不存在的 Sheet 名稱會發生什么事情呢?例如我們將上面的 sheet_name
修改為 aaa
,來看下:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='aaa') print(df) # 輸出結果 Traceback (most recent call last): File "C:\Users\inwsy\AppData\Local\Programs\Python\Python37\lib\site-packages\xlrd\book.py", line 474, in sheet_by_name sheetx = self._sheet_names.index(sheet_name) ValueError: 'aaa' is not in list During handling of the above exception, another exception occurred:
可以看到這里拋出了 ValueError 的異常,並且提示 aaa
不在列表中。
在指定 Sheet 名稱的時候除了可以使用 Sheet 的具體名稱,還可以使用 Sheet 的順序,需要注意這個順序開頭是從 0 開始的。
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0) print(df) # 輸出結果 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
指定導入行索引
我們在導入文件的時候,行索引默認是會使用從 0 開始的默認索引,如果對行索引有需求的話,可以使用 index_col
參數來設置行索引。
比如我們現在設置 create_date
這個參數作為行索引,注意參數起始從 0 開始:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, index_col=5) print(df) # 輸出結果 plantform read_num fans_num rank_num like_num create_date 2019-11-23 23:00:10 cnblog 215 0 118 0 2019-11-23 23:00:03 juejin 177 0 -2 1 2019-11-23 23:00:02 csdn 1652 69 0 24 2019-11-22 23:00:15 cnblog 650 3 191 0 2019-11-22 23:00:02 juejin 272 3 -23 1 ... ... ... ... ... ... 2020-02-20 23:00:02 juejin 212 0 -1 2 2020-02-20 23:00:01 csdn 1602 1 0 1 2020-02-21 23:00:05 cnblog 19 0 41 0 2020-02-21 23:00:02 juejin 125 1 -4 0 2020-02-21 23:00:02 csdn 1475 8 0 3 [408 rows x 5 columns]
指定導入列索引
同行索引一樣,默認也是采用源數據的第一行作為列索引,同樣,我們可以通過 header
進行列索引的設置, header
的默認參數為 0 ,也就是第一行,自定義可以使用其他行,將行號作為參數傳入即可,我們演示一下使用第二行作為索引:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, header=1) print(df) # 輸出結果 cnblog 215 0 118 0.1 2019-11-23 23:00:10 0 juejin 177 0 -2 1 2019-11-23 23:00:03 1 csdn 1652 69 0 24 2019-11-23 23:00:02 2 cnblog 650 3 191 0 2019-11-22 23:00:15 3 juejin 272 3 -23 1 2019-11-22 23:00:02 4 csdn 2202 129 0 37 2019-11-22 23:00:01 .. ... ... ... ... ... ... 402 juejin 212 0 -1 2 2020-02-20 23:00:02 403 csdn 1602 1 0 1 2020-02-20 23:00:01 404 cnblog 19 0 41 0 2020-02-21 23:00:05 405 juejin 125 1 -4 0 2020-02-21 23:00:02 406 csdn 1475 8 0 3 2020-02-21 23:00:02 [407 rows x 6 columns]
指定導入行數
有時候,如果我們只需要了解一下這個文件中有些什么數據,那么我們就不需要導入所有的數據,可以使用 nrows
來指定導入的行數,這里我們選擇導入 Excel 的前 100 行:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, nrows=100) print(df) # 輸出結果 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 95 csdn 1492 88 0 13 2019-10-23 23:51:37 96 cnblog 1338 2 219 0 2019-10-22 23:33:33 97 juejin 204 1 -6 6 2019-10-22 23:18:19 98 csdn 1064 61 7094 18 2019-10-22 23:18:08 99 cnblog -493 1 69 0 2019-10-21 22:38:32 [100 rows x 6 columns]
從結果的數據統計,可以看到我們成功的導入了前 100 行的數據,雖然行索引只有 99 ,是因為么我們 Excel 的頭也占了一行。
指定導入列
有時候,我們的 Excel 中的列太多了,而我們處理的數據又不需要那么多列的時候,我們可以使用 usecols
來指定我們需要導入的列
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, usecols=[0, 1, 2]) print(df) # 輸出結果 plantform read_num fans_num 0 cnblog 215 0 1 juejin 177 0 2 csdn 1652 69 3 cnblog 650 3 4 juejin 272 3 .. ... ... ... 403 juejin 212 0 404 csdn 1602 1 405 cnblog 19 0 406 juejin 125 1 407 csdn 1475 8 [408 rows x 3 columns]
注意這里的 usecols
的參數是一個數組,表示我們將要導入的列。
1.2 Excel導出
在做數據導出前,我們需要現有一份 DataFrame 數據,這里的數據小編偷懶,就直接讀取之前示例中的 Excel 了,當然這么做並沒有什么意義,僅用來演示導出數據。
在 Pandas 中導出 Excel 的時候,需要使用到的方法是 to_excel()
方法,在導出 Excel 文件的時候,一定要寫對文件路徑,我們在前面的文章中有介紹過文件路徑的書寫方法,直接上示例:
import pandas as pd # 數據讀取 df = pd.read_excel("table_join_exp.xlsx", sheet_name='Sheet1') # 數據導出 df.to_excel(excel_writer=r'D:\Development\Projects\demo.xlsx')
我們來看下 to_excel()
這個方法的語法:DataFrame.to_excel(self, 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) → None
to_excel()
這個方法中的參數還是比較多的,我們挑幾個常用的介紹一下:
- excel_writer :文件路徑或現有的ExcelWriter
- sheet_name :字符串,默認是 “Sheet1”
- float_format :格式化浮點數的字符串
- header :寫出列名。如果給定字符串列表,則假定它是列名稱的別名。
- index :寫索引
- columns :設置要導出的列
- encoding :編碼格式,一般我們選擇
'utf-8'
。 - na_rep :缺失值處理
- inf_rep :無窮值的處理
接下來看示例,這個示例小編會盡量寫得復雜一點,把我們上面的屬性盡可能的都用上,並且標注好注釋:
df.to_excel(excel_writer=r'D:\Development\Projects\demo.xlsx', sheet_name='測試文檔', # 創建 sheet 名稱 index=False, # 設置索引不顯示 columns=['編號', '姓名'], # 設置要導出的列 encoding='utf-8', # 設置編碼格式 na_rep='0', # 缺失值處理 inf_rep='inf' # 無窮值處理 )
示例代碼與文件 https://github.com/meteor1993/python-learning/tree/master/python-data-analysis/pandas-demo