Pandas 讀存 Excel 大全
公衆號:尤而小屋
作者:Peter
編輯:Peter
本文記錄的是如何通過 Pandas 來讀取 Excel 文件,以及如何將 DataFrame 保存到 Excel 文件中。
官網參數詳解:https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html
參數
read_excel 函數能夠讀取的格式包含:xls, xlsx, xlsm, xlsb, odf, ods 和 odt 文件擴展名。支持讀取單一 sheet 或幾個 sheet。
下面記錄的官方文檔中提供的全部參數信息:
pandas.read_excel(
io,
sheet_name=0,
header=0,
names=None,
index_col=None,
usecols=None,
squeeze=None,
dtype=None,
engine=None,
converters=None,
true_values=None,
false_values=None,
skiprows=None,
nrows=None,
na_values=None,
keep_default_na=True,
na_filter=True,
verbose=False,
parse_dates=False,
date_parser=None,
thousands=None,
decimal='.',
comment=None,
skipfooter=0,
convert_float=None,
mangle_dupe_cols=True,
storage_options=None
)
下面解釋常用參數的含義:
-
io:文件路徑,支持 str, bytes, ExcelFile, xlrd.Book, path object, or file-like object。默認讀取第一個 sheet 的內容。案例:"/desktop/student.xlsx"
-
sheet_name:sheet 表名,支持 str, int, list, or None;默認是 0,索引號從 0 開始,表示第一個 sheet。案例:sheet_,sheet_name=[1,2,"sheet3"]。None 表示引用所有 sheet
-
header:表示用第幾行作爲表頭,支持 int, list of int;默認是 0,第一行的數據當做表頭。header=None 表示不使用數據源中的表頭,Pandas 自動使用 0,1,2,3… 的自然數作爲索引。
-
names:表示自定義表頭的名稱,此時需要傳遞數組參數。
-
index_col:指定列屬性爲行索引列,支持 int, list of int, 默認是 None,也就是索引爲 0,1,2,3 等自然數的列用作 DataFrame 的行標籤。如果傳入的是列表形式,則行索引會是多層索引
-
usecols:待解析的列,支持 int, str, list-like, or callable ,默認是 None,表示解析全部的列。
-
dtype:指定列屬性的字段類型。案例:{‘a’: np.float64, ‘b’: np.int32};默認爲 None,也就是不改變數據類型。
-
engine:解析引擎;可以接受的參數有 "xlrd"、"openpyxl"、"odf"、"pyxlsb",用於使用第三方的庫去解析 excel 文件
-
“xlrd” 支持舊式 Excel 文件 (.xls)
-
“openpyxl” 支持更新的 Excel 文件格式
-
“odf” 支持 OpenDocument 文件格式 (.odf、.ods、.odt)
-
“pyxlsb” 支持二進制 Excel 文件
-
converters:對指定列進行指定函數的處理,傳入參數爲列名與函數組成的字典,和 usecols 參數連用。key 可以是列名或者列的序號,values 是函數,可以自定義的函數或者 Python 的匿名 lambda 函數
-
skiprows:跳過指定的行(可選參數),類型爲:list-like, int, or callable
-
nrows:指定讀取的行數,通常用於較大的數據文件中。類型 int, 默認是 None,讀取全部數據
-
na_values:指定列的某些特定值爲 NaN
-
keep_default_na:是否導入空值,默認是導入,識別爲 NaN
模擬數據
現在本次模擬了兩個數據**:Pandas_Excel.xls 和 Pandas_Excel.xlsx**
Pandas_Excel.xls 文件中包含兩個 sheet,第二個數據只比第一個多個 index 的信息
1、sheet1 的內容
2、sheet2 的內容
3、Pandas_Excel.xlsx 的內容,模擬的完整信息:
import pandas as pd
默認情況
此時文件剛好在當前目錄下,讀取的時候指定文件名即可,可以看到讀取的是第一個 sheet
df = pd.read_excel("Pandas-Excel.xls")
df
參數 io
填寫完整的文件路徑作爲 io 的取值。也可以使用相對路徑
pd.read_excel(r"/Users/peter/Desktop/pandas/Pandas-Excel.xls")
參數 sheet_name
# pd.read_excel("Pandas-Excel.xls", sheet_name=0) # 效果同上
# 直接指定sheet的名字
pd.read_excel("Pandas-Excel.xls", sheet_) # 效果同上
換成讀取第二個 sheet:名稱是 Sheet2
pd.read_excel("Pandas-Excel.xls", sheet_)
結果中多了一列 index 的取值
參數 header
# 和默認情況相同
pd.read_excel("Pandas-Excel.xls", header=[0])
pd.read_excel("Pandas-Excel.xls", header=[1]) # 單個元素
第一行的數據當做列屬性:
傳入多個元素會形成多層索引:
pd.read_excel("Pandas-Excel.xls", header=[0,1]) # 多個元素
參數 names
# 指定列名稱
pd.read_excel("Pandas-Excel.xls", names=["a","b","c","d","e"])
參數 index_col
# 指定單個元素作爲索引
pd.read_excel("Pandas-Excel.xls", index_col=[0])
# 多個元素
pd.read_excel("Pandas-Excel.xls", index_col=[0,1])
參數 usecols
pd.read_excel("Pandas-Excel.xls", usecols=[0]) # 單個字段
pd.read_excel("Pandas-Excel.xls", usecols=[0,2,4]) # 多個字段
# 直接指定名稱
pd.read_excel("Pandas-Excel.xls", usecols=["age","sex"])
# 傳入匿名函數,字段中包含a,結果sex沒有了
pd.read_excel("Pandas-Excel.xls", usecols=lambda x: "a" in x)
參數 dtype
df.dtypes
name object
age int64
sex object
address object
date datetime64[ns]
dtype: object
從上面的結果中看到 age 字段,在默認情況下讀取的是 int64 類型:
# 指定數據類型
df1 = pd.read_excel("Pandas-Excel.xls", dtype={"age":"float64"})
# 查看字段信息
df1.dtypes
name object
age float64 # 修改
sex object
address object
date datetime64[ns]
dtype: object
參數 engine
# xls 結尾
pd.read_excel("Pandas-Excel.xls", engine="xlrd")
# xlsx 結尾
pd.read_excel("Pandas-Excel.xlsx", engine="openpyxl")
參數 converters
pd.read_excel("Pandas-Excel.xlsx") # 默認操作
pd.read_excel("Pandas-Excel.xlsx",
usecols=[1,3], # 1-age 3-address 數值爲原索引號
converters={0:lambda x: x+5, # 0代表上面[1,3]中的索引號
1:lambda x: x + "市"
})
參數 skiprows
pd.read_excel("Pandas-Excel.xls") # 默認情況
把張三和李四所在的行直接跳過:
pd.read_excel("Pandas-Excel.xls", skiprows=2)
# 跳過偶數行
pd.read_excel("Pandas-Excel.xls", skiprows=lambda x: x%2 == 0)
參數 nrows
# 指定讀取的行數
pd.read_excel("Pandas-Excel.xls", nrows=2)
參數 na_values
pd.read_excel("Pandas-Excel.xls") # 默認
pd.read_excel("Pandas-Excel.xls",
na_values={"sex":"未知"})
sex 字段中的未知顯示成了 NaN:
參數 keep_default_na
pd.read_excel("Pandas-Excel.xls") # 默認keep_default_na=True
pd.read_excel("Pandas-Excel.xls", keep_default_na=False)
輸出到 excel 文件
簡單模擬一份數據:
df2 = pd.DataFrame({"num1":[1,2,3],
"num2":[4,5,6],
"num3":[7,8,9]})
df2
df2.to_excel("newdata_1.xlsx")
效果如下:
df2.to_excel("newdata_2.xlsx",index=False)
不會帶上索引號
尤而小屋 尤而小屋,一個溫馨且有愛的小屋🏡 小屋主人,一手代碼謀求生存,一手掌勺享受生活,歡迎你的光臨~
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/YgjQPlea5lpdi9jo_OCvBA