目錄
1、前言
2、讀取Excel
3、對Excel進行操作
3.1、獲取行號、列名
?3.2、獲取單元格的值,并循環(huán)輸出
?3.3、對空值進行處理,替換
?3.4、增加一列,并對新增列的第一行進行賦值
3.5、將修改后數(shù)據(jù)保存到原文檔
?3.6、關(guān)于循環(huán)取數(shù)
4、錯誤處理
5、全部代碼
1、前言
網(wǎng)上也有很多關(guān)于如何使用pandas對Excel表格進行操作的文章,本文純當記錄
Excel原文件數(shù)據(jù)如下:
2、讀取Excel
對Excel操作分兩步:
1、首先要導入pandas庫
2、設(shè)置Excel文件路徑
注意:
pandas.read_excel(file, sheet_name=0, keep_default_na=False)
1、file為要讀取的Excel文件
2、sheet_name表示要讀取的sheet名,0表示第一個sheet,1表示第2個sheet,依次類推;也可以直接寫sheet的名稱,如sheet_name='Sheet1'
3、當Excel中有空值時,直接讀取會顯示nan,read_excel方法中加上keep_default_na=False后,
空值nan會變成:'' 空字符串,后續(xù)可用if cell_data=='' 進行判斷
代碼如下:
import pandas
file = r'D:\student.xlsx'
class opexcel():
? ? def getdata(self, file):
? ? ? ? data = pandas.read_excel(file, sheet_name=0, keep_default_na=False)
? ? ? ? print(type(data)) # 輸出數(shù)據(jù)類型(DataFrame)
? ? ? ? print(data) ?# 輸出數(shù)據(jù)
if __name__ == '__main__':
? ? opexcel().getdata(file)
打印結(jié)果如下:
3、對Excel進行操作
3.1、獲取行號、列名
? ? ? ? row_index = data.index.values ?# 行號: 數(shù)組形式<class 'numpy.ndarray'> [0 1 2 3 4 5 6 7 8]
? ? ? ? print('行號是:%s' % row_index)
? ? ? ? row_num = len(data.index.values) ?# 行數(shù)
? ? ? ? print('行數(shù)是:%s' % row_num)
? ? ? ? col_index = data.columns.values ?# 列名: 數(shù)組形式<class 'numpy.ndarray'>['姓名' '性別' '年齡' '住址' '愛好']
? ? ? ? print('列名是:%s' % col_index)
? ? ? ? col_num = len(data.columns.values) ?# 列數(shù)
? ? ? ? print('列數(shù)是:%s' % col_num)
打印結(jié)果:
?3.2、獲取單元格的值,并循環(huán)輸出
? ? ? ? for i in range(row_num): # 循環(huán)行數(shù)
? ? ? ? ? ? for j in range(col_num): # 循環(huán)列數(shù)
? ? ? ? ? ? ? ? cell_data=data.iloc[i,j] # 獲取單元格的值
? ? ? ? ? ? ? ? ???print('第%s行,第%s列的數(shù)據(jù)是:%s ' %(i,i,cell_data))
打印結(jié)果如下:
?3.3、對空值進行處理,替換
Excel文件中,某個單元格的值可能為空,直接讀取會顯示nan,且各個單元格的數(shù)據(jù)類型可能不一致,如date、str、int、float。這時如果直接讀取,使用numpy.isnan()或者pandas.isnull()進行判斷,都可能會報錯,所以在開頭讀取Excel文件的方法pandas.read_excel(file, sheet_name=0, keep_default_na=False)中加上keep_default_na=False后,空值nan會變成:'' 空字符串。
現(xiàn)在我們想要將Excel中所有為空的單元格,替換為NULL字符串,操作如下
1、取出所有列名
2、循環(huán)列名,對空值替換(據(jù)實踐,只有列名才有.replace()方法)
col_index = data.columns.values # 列名 for col in col_index : data[col].replace('','NULL',inplace=True) ????# 第一個參數(shù)是替換前的值,即Excel表指定列的值,如有多個相同的值,后續(xù)都會被替換 ??????第二個參數(shù)是替換后的值,此處為字符串'NULL',也可填數(shù)字、或其他類型 ??????第三個參數(shù),是否替換,True為替換 print(data) 打印結(jié)果如下:
如要將上方結(jié)果中【愛好】這一列的【無】,替換為羽毛球,操作如下:
data['愛好'].replace('無','羽毛球',inplace=True)
結(jié)果如下:
?3.4、增加一列,并對新增列的第一行進行賦值
新增一列【成績】,并賦值未None:
data['成績']=None
打印結(jié)果如下:
?修改增列的第一行的值為50:
data['成績'][0]=50?
打印結(jié)果如下:
?3.5、將修改后數(shù)據(jù)保存到原文檔
注意:以上操作中將空值替換、新增列、修改單元格數(shù)據(jù)等編輯操作,只在控制臺有效,實際文件的內(nèi)容并不會被改變
file = r'D:\student.xlsx'
data.to_excel(file,sheet_name='Sheet1',index=False,header=True)
?# 用DataFrame的to_excel方法可將編輯后的數(shù)據(jù)進行保存(前面第一節(jié)已知data為DataFrame類型)
1、第一個參數(shù)file,表示數(shù)據(jù)將要保存到這個文件??梢允窃募?r'D:\student.xlsx'),如果寫另外的文件(r'D:/test/newstudent.xlsx'),則數(shù)據(jù)將保存到另一個文件中,原文件數(shù)據(jù)不變
2、第二個參數(shù)sheet_name,表示將數(shù)據(jù)保存到文件的哪一個sheet工作表。如工作表不存在則會報錯。
3、第三個參數(shù)index,表示工作表自帶的序號。如果設(shè)置index=True,則保存后的數(shù)據(jù)將多出一列
4、第四個參數(shù)header,表示列名。設(shè)置header=True,保存后的數(shù)據(jù)將帶上列名;設(shè)置header=False,保存后的數(shù)據(jù)將沒有列名
注意:
讀取文件的時候,sheet_name可以寫成 sheet_name=0或 sheet_name='Sheet1'
data = pandas.read_excel(file, sheet_name=0,keep_default_na=False)
寫入文件的時候,只能填寫工作表的名稱sheet_name='Sheet1'
保存后的數(shù)據(jù)如下:
設(shè)置index=True,結(jié)果如下:
?設(shè)置header=False,結(jié)果如下:
?3.6、關(guān)于循環(huán)取數(shù)
col_index = data.columns.values # 列名 ['姓名' '性別' '年齡' '住址' '愛好' '成績'] 數(shù)組,用in進行循環(huán)取值:for i in col_index: col_num = len(data.columns.values) # 列數(shù) 6 數(shù)值,用rang進行循環(huán)取數(shù):for i in range(col_num :
3.7、字符串分割
url=data['URL'][0] # https://blog.csdn.net/m0_46400195/article/detailspy print(url) print(type(url)) str1=str(data['URL'][0]).split('/') # 注意: 雖然顯示URL為str類型,但是仍然要先將data['URL'][0]轉(zhuǎn)為str,才能使用.split方法進行分割。str(data['URL'][0]).split('/'),也可以寫成str(url).split('/') print(str1) # 打印分割后的結(jié)果 newstr1=str1[0]+'//'+str1[2]+'/'+str1[3]+'/'+'druid' #根據(jù)分割后的信息進行拼接 newstr2 = str1[0] + '//' + str1[2] + '/' + str1[3]+'/' + 'druid/index.html' print(newstr1) #打印拼接后的字符串 print(newstr2) 打印結(jié)果如下:
4、錯誤處理
1、PermissionError: [Errno 13] Permission denied
這個錯誤出現(xiàn)可能是文件未關(guān)閉,關(guān)閉后再操作即可。還有可能是文件損壞了,打開文件,確認文件內(nèi)容是否正常文章來源:http://www.zghlxwxcb.cn/news/detail-406331.html
2、……文章來源地址http://www.zghlxwxcb.cn/news/detail-406331.html
5、全部代碼
import pandas
import requests
from pandas import DataFrame
import xlwt
'''
1、當Excel中有空值時,直接讀取會顯示nan,read_excel方法中加上keep_default_na=False后,
空值nan會變成:‘’ 空字符串,后續(xù)可用if cell_data=='' 進行判斷
2、col_index = data.columns.values # 列名
數(shù)組col_index:['序號' '是否導出' '所屬單位'],用in進行循環(huán)取值:for i in col_index:
row_num = len(data.index.values) # 行數(shù)
數(shù)值row_num:用rang進行循環(huán)取數(shù):for i in range(row_num):
'''
file = r'D:\student.xlsx'
class opexcel():
def getdata(self, file):
data = pandas.read_excel(file, sheet_name=0,keep_default_na=False)
# 當Excel中有空值時,直接讀取會顯示nan,read_excel方法中加上keep_default_na=False后,
# 空值nan會變成:‘’ 空字符串,后續(xù)可用if cell_data=='' 進行判斷
# print(type(data))
# print(data) # 輸出數(shù)據(jù)
row_index = data.index.values # 行號: 數(shù)組形式<class 'numpy.ndarray'> [0 1 2 3 4 5 6 7 8]
print('行號是:%s' % row_index)
row_num = len(data.index.values) # 行數(shù)
print('行數(shù)是:%s' % row_num)
col_index = data.columns.values # 列名: 數(shù)組形式<class 'numpy.ndarray'>['序號' '是否導出' '所屬單位' '項目名稱' '項目']
print('列名是:%s' % col_index)
col_num = len(data.columns.values) # 列數(shù)
print('列數(shù)是:%s' % col_num)
# data['result']=None
# data.to_excel(r'D:\userCase11.xls', sheet_name='Sheet1', index=False, header=True)
# for i in range(row_num): # 循環(huán)行數(shù)
# for j in range(col_num): # 循環(huán)列數(shù)
# cell_data=data.iloc[i,j] # 獲取單元格的值
# print('第%s行,第%s列的數(shù)據(jù)是:%s ' %(i,i,cell_data))
#
# for col in col_index :
# data[col].replace('','NULL',inplace=True)
# print(data)
#
# data['愛好'].replace('無','羽毛球',inplace=True)
# print(data)
# data['成績']=None
# print(data)
# data['成績'][0]=50
# print(data)
# data.to_excel(file,sheet_name='Sheet1',index=False,header=False)
if __name__ == '__main__':
opexcel().getdata(file)
到了這里,關(guān)于Python之如何使用pandas操作Excel表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!