python 解析 excel 對比
包 | 版本 | xls讀 | xlsx讀 | xls寫 | xlsx寫 | 備注 |
---|---|---|---|---|---|---|
xlrd | 1.1.0(2017年8月22日) | √ | √ | 2.0 之后不支持xlsx | ||
xlwt | 1.3.0(2017年8月22日) | √ | ||||
openpyxl | 2.6.2(2019年3月29日) | √ | √ | |||
XlsxWriter | 1.2.1(2019年9月14日) | √ | ||||
xlutils | 2.0.0(2019年6月9日) | √ | √ | √ | 需xlrd/xlwt配合 | |
pandas | 0.25.1(2019年8月22日) | √ | √ | √ | √ | 需xlrd/xlwt/openpyxl/xlsxwriter配合 |
簡介
Pandas是python的一個數據分析包,納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。
Pandas提供了大量能使我們快速便捷地處理數據的函數和方法。
Pandas官方文檔:https://pandas.pydata.org/pandas-docs/stable/
Pandas中文文檔:https://www.pypandas.cn
安裝
-
pandas依賴處理Excel的xlrd模塊,所以我們需要提前安裝 xlrd,命令:pip install xlrd
-
安裝pandas模塊還需要一定的編碼環境,所以我們自己在安裝的時候,確保你的電腦有這些環境:Net.4 、VC-Compiler以及winsdk_web。
-
步驟1和2 準備好了之后,就可以開始安裝pandas了,命令:pip install pandas
pandas操作Excel表單
簡單示例
import pandas as pd
from pandas import DataFrame# 讀
data = pd.read_excel('1.xlsx')# 查看所有的值
print(data.values)# 查看第一行的值
print(data.values[0])# 查看某一列所有的值
print(data['標題列1'].values)# 新增列
data['標題列3'] = None# 新增行
data.loc[3] = ['王五', 100, '男']# 刪除行:axis=0
data = data.drop([0,1], axis=0)# 刪除列:axis=1
data.drop('標題列3', axis=1)# 保存
DataFrame(data).to_excel('1.xlsx', sheet_name='Sheet1', index=False, header=True)
讀取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:返回指定sheet,默認索引0返回第一個,也可用名稱,如果返回多個則可用列表,為None則返回全表
header:指定表頭,也可用列表指定多行
names:自定義列名,長度和Excel列長度必須一致
index_col:用作索引的列
usecols:讀取指定的列,參數為列表,如[0,1]表示第1和第2列
讀取Excel文件,得到的結果是一個二維矩陣
# 默認讀取第一個表單
df=pd.read_excel('1.xlsx')# 可以通過sheet_name來指定讀取的表單
df=pd.read_excel('1.xlsx',sheet_name='student')# 表格首行為無效數據 或 表格首行為空 ,header=1
rdexcle = pd.read_excel('1.xlsx',header=1)data=df.head() # 默認讀取前5行的數據
print("獲取到所有的值:\n{0}".format(data)) # 格式化輸出# 通過表單索引來指定要訪問的表單,0表示第一個表單
# 也可以采用表單名和索引的雙重方式來定位表單
# 也可以同時定位多個表單,方式都羅列如下所示
df=pd.read_excel('1.xlsx',sheet_name=['python','student']) # 可以通過表單名同時指定多個
# df=pd.read_excel('1.xlsx',sheet_name=0) # 可以通過表單索引來指定讀取的表單
# df=pd.read_excel('1.xlsx',sheet_name=['python',1]) # 可以混合的方式來指定
# df=pd.read_excel('1.xlsx',sheet_name=[1,2]) # 可以通過索引 同時指定多個
data=df.values # 獲取所有的數據,注意這里不能用head()方法哦~
print("獲取到所有的值:\n{0}".format(data))
查看屬性、列名、顯示前幾行、后幾行
data = pd.read_excel('1.xlsx')
print('顯示表格的屬性:',data.shape) # 打印顯示表格的屬性,幾行幾列
print('顯示表格的列名:',data.columns) # 打印顯示表格有哪些列名
# head() 默認顯示前5行,可在括號內填寫要顯示的條數
print('顯示表格前三行:',data.head(1))
# tail() 默認顯示后5行,可在括號內填寫要顯示的條數
print('顯示表格后五行:',data.tail())
data = pd.read_excel('lemon.xlsx')
data.columns=['ID','NAME'] # 設置表頭
data.set_index('ID',inplace=True) # inplace=True表示 在當前表上修改。不用再新建表
三、pandas操作Excel的行列
1:讀取指定的單行,數據會存在列表里面
# 讀取指定行
df=pd.read_excel('lemon.xlsx') # 這個會直接默認讀取到這個Excel的第一個表單
data=df.ix[0].values#0表示第一行 這里讀取數據并不包含表頭,要注意哦!
print("讀取指定行的數據:\n{0}".format(data))
2:讀取指定的多行,數據會存在嵌套的列表里面:
df=pd.read_excel('lemon.xlsx')
data=df.ix[[1,2]].values # 讀取指定多行的話,就要在ix[]里面嵌套列表指定行數
print("讀取指定行的數據:\n{0}".format(data))
3:讀取指定的行列:
df=pd.read_excel('lemon.xlsx')
data=df.ix[1,2]#讀取第一行第二列的值,這里不需要嵌套列表
print("讀取指定行的數據:\n{0}".format(data))
4:讀取指定的多行多列值:
df=pd.read_excel('lemon.xlsx')
data=df.ix[[1,2],['title','data']].values#讀取第一行第二行的title以及data列的值,這里需要嵌套列表
print("讀取指定行的數據:\n{0}".format(data))
5:獲取所有行的指定列
df=pd.read_excel('lemon.xlsx')
data=df.ix[:,['title','data']].values#讀所有行的title以及data列的值,這里需要嵌套列表
print("讀取指定行的數據:\n{0}".format(data))
6:獲取行號并打印輸出
df=pd.read_excel('lemon.xlsx')
print("輸出行號列表",df.index.values)輸出結果是:
輸出行號列表 [0 1 2 3]
7:獲取列名并打印輸出
df=pd.read_excel('lemon.xlsx')
print("輸出列標題",df.columns.values)運行結果如下所示:
輸出列標題 ['case_id' 'title' 'data']
8:獲取指定行數的值:
df=pd.read_excel('lemon.xlsx')
print("輸出值",df.sample(3).values)#這個方法類似于head()方法以及df.values方法輸出值[[2 '輸入錯誤的密碼' '{"mobilephone":"18688773467","pwd":"12345678"}'][3 '正常充值' '{"mobilephone":"18688773467","amount":"1000"}'][1 '正常登錄' '{"mobilephone":"18688773467","pwd":"123456"}']]
9:獲取指定列的值:
df=pd.read_excel('lemon.xlsx')
print("輸出值\n",df['data'].values)
四:pandas處理Excel數據成為字典
df=pd.read_excel('lemon.xlsx')
test_data=[]
for i in df.index.values:#獲取行號的索引,并對其進行遍歷:#根據i來獲取每一行指定的數據 并利用to_dict轉成字典row_data=df.ix[i,['case_id','module','title','http_method','url','data','expected']].to_dict()test_data.append(row_data)
print("最終獲取到的數據是:{0}".format(test_data))
最后得到的結果是:
最終獲取到的數據是:
[{'title': '正常登錄', 'case_id': 1, 'data': '{"mobilephone":"18688773467","pwd":"123456"}'},
{'title': '輸入錯誤的密碼', 'case_id': 2, 'data': '{"mobilephone":"18688773467","pwd":"12345678"}'},
{'title': '正常充值', 'case_id': 3, 'data': '{"mobilephone":"18688773467","amount":"1000"}'},
{'title': '充值輸入負數', 'case_id': 4, 'data': '{"mobilephone":"18688773467","amount":"-100"}'}]