Ⅰ python對excel操作
Python對於Excel的操作是多種多樣的,掌握了相關用法就可以隨心所欲的操作數據了!
操作xls文件
xlrd(讀操作):
import xlrd
1、引入xlrd模塊
workbook=xlrd.open_workbook("36.xls")
2、打開[36.xls]文件,獲取excel文件的workbook(工作簿)對象
names=workbook.sheet_names()
3、獲取所有sheet的名字
worksheet=workbook.sheet_by_index(0)
4、通過sheet索引獲得sheet對象
worksheet為excel表第一個sheet表的實例化對象
worksheet=workbook.sheet_by_name("各省市")
5、通過sheet名獲得sheet對象
worksheet為excel表sheet名為【各省市】的實例化對象
nrows=worksheet.nrows
6、獲取該表的總行數
ncols=worksheet.ncols
7、獲取該表的總列數
row_data=worksheet.row_values(n)
8、獲取該表第n行的內容
col_data=worksheet.col_values(n)
9、獲取該表第n列的內容
cell_value=worksheet.cell_value(i,j)
10、獲取該表第i行第j列的單元格內容
xlwt(寫操作):
import xlwt
1、引入xlwt模塊
book=xlwt.Workbook(encoding="utf-8")
2、創建一個Workbook對象,相當於創建了一個Excel文件
sheet = book.add_sheet('test')
3、創建一個sheet對象,一個sheet對象對應Excel文件中的一張表格。
sheet.write(i, j, '各省市')
4、向sheet表的第i行第j列,寫入'各省市'
book.save('Data\\36.xls')
5、保存為Data目錄下【36.xls】文件
操作xlsx文件
openpyxl(讀操作):
import openpyxl
1、引入openpyxl模塊
workbook=openpyxl.load_workbook("36.xlsx")
2、打開[36.xlsx]文件,獲取excel文件的workbook(工作簿)對象
names=workbook.sheetnames
worksheet=workbook.worksheets[0]
worksheet=workbook["各省市"]
ws = workbook.active
6、獲取當前活躍的worksheet,默認就是第一個worksheet
nrows=worksheet.max_row
7、獲取該表的總行數
ncols=worksheet.max_column
8、獲取該表的總列數
content_A1= worksheet['A1'].value
9、獲取該表A1單元格的內容
content_A1=worksheet.cell(row=1,column=1).value
10、獲取該表第1列第1列的內容
openpyxl(寫操作):
workbook=openpyxl.Workbook()worksheet = workbook.active
3、獲取當前活躍的worksheet,默認就是第一個worksheet
worksheet.title="test"
4、worksheet的名稱設置為"test"
worksheet = workbook.create_sheet()
5、創建一個新的sheet表,默認插在工作簿末尾
worksheet.cell(i,j,'空')
6、第i行第j列的值改成'空'
worksheet["B2"]="空"
7、將B2的值改成'空'
worksheet.insert_cols(1)
8、在第一列之前插入一列
worksheet.append(["新增","台灣省"])
9、添加行
workbook.save("Data\\36.xlsx")
10、保存為Data目錄下【36.xlsx】文件
pandas處理excel文件
pandas操作:
import pandas as pd
1、引入pandas模塊
data = pd.read_excel('36.xls')
2、讀取[36.xls]或者[36.xlsx]文件
data = pd.read_csv('36.csv')
3、讀取[36.csv]文件
data=data.dropna(subset=['店鋪'])
4、過濾掉data店鋪列有缺失的數據
data.sort_values("客戶網名", inplace=True)
5、將data數據按照客戶網名列進行從小到大排序
data = pd.read_csv(36.csv, skiprows = [0,1,2],sep = None, skipfooter = 4)
6、讀取[36.csv]文件,前三行和後四行的數據略過
data = data.fillna('空')
7、將data中的空白處填充成'空'
data.drop_plicates('訂單','first',inplace=True)
8、data中的數據,按照【訂單】列做去重處理,保留第一條數據
data=pd.DataFrame(data,columns=['訂單','倉庫'])
9、只保留data中【訂單】【倉庫】列的數據
data = data[(data[u'展現量'] > 0)]
10、只保留【展現量】列中大於0的數據
data= data[data["訂單"].str.contains('000')]
11、只保留【訂單】列中包含'000'的數據
data= data[data["倉庫"]=='正品倉']
12、只保留【倉庫】列是'正品倉'的數據
xs= data[data["店鋪"]=='南極人']['銷售額']
13、獲取店鋪是南極人的銷售額數據
data['訂單'] = data['訂單'].str[3:7]
14、【訂單】列的值只保留4-8個位元組的值
data["郵資"] = np.where((data['店鋪'].str.contains('T|t')) & -(data['倉庫'] == '代發倉'), 8, data['郵資'])
15、滿足店鋪列包含 T 或 t 並且倉庫不等於'代發倉'的話,將郵資的值改成8,否則值不變
data = np.array(data).tolist()
16、將data從DataFrame轉換成列表
data=pd.DataFrame(data)
17、將列表轉換成DataFrame格式
zhan = data[u'展現'].sum().round(2)
18、將data中所有展現列數據求和,並取兩位小數
sum=data.groupby(['店鋪'])['刷單'].sum()
19、將data中按照店鋪對刷單進行求和
counts=data['店鋪'].value_counts()
20、將data按照店鋪進行計算
avg=data.groupby(['店鋪'])['刷單'].mean()
21、將data按照店鋪對刷單進行求平均數
count = pd.concat([counts,sum], axis=1, ignore_index=True, sort=True)
22、將counts和sum兩個DataFrame進行了組合
count=count.rename(index=str, columns={0: "訂單", 1: "成本"})
23、將新生成的DataFrame列名進行修改
data = pd.merge(sum, counts, how='left', left_on='店鋪', right_on='店鋪')
24、將列表轉換成DataFrame格式
from openpyxl import Workbook
wb=Workbook()
ws1=wb.active
data.to_excel('36.xlsx')
wb.close()
25、data完整的寫入到關閉過程,執行此操作的時候【36.xlsx】不能是打開狀態
excel格式操作
樣式處理:
1、打開【36.xlsx】
sheet=workbook.worksheets[0]
2、將第一個sheet對象賦值給sheet
sheet.column_dimensions['A'].width = 20.0
3、將A列的寬度設置為20
sheet.row_dismensions[1].height = 20.0
4、將第一行的行高設置為20
sheet.merge_cells('A1:A2')
5、將sheet表A1和A2單元格合並
sheet.unmerge_cells('A1:A2')
6、將sheet表A1和A2單元格取消合並
sheet.insert_rows(2,2)
7、將sheet表從第2行插入2行
sheet.insert_cols(3,2)
8、將sheet表從第3列插入2列
sheet.delete_rows(2)
9、刪除第2行
sheet.delete_cols(3, 2)
10、將sheet表從第3列開始刪除2列
from openpyxl.styles import Font, Border, PatternFill, colors, Alignment
11、分別引入字體、邊框、圖案填充、顏色、對齊方式
sheet.cell(i,j).font = Font(name='Times New Roman', size=14, bold=True, color=colors.WHITE)
12、設置sheet表第 i 行第 j 列的字體
sheet.cell(i,j).alignment = Alignment(horizontal='center', vertical='center')
13、設置sheet表第 i 行第 j 列的字體對齊方式
left, right, top, bottom = [Side(style='thin', color='000000')] * 4sheet.cell(i,j).border = Border(left=left, right=right, top=top, bottom=bottom)
14、引入邊框樣式並調用
fill = PatternFill("solid", fgColor="1874CD")sheet.cell(1,j).fill = fill
15、引入填充樣式,並調用
import xlrd
from openpyxl import Workbook
from openpyxl import load_workbook
workbook=load_workbook(filename='C:/Users/EDZ/Desktop/工作/2021.08.03/大兄弟.xlsx')
sheet=workbook.active
sheet.insert_cols(idx=1)
sheet.merge_cells(A1:A3)
sheet['A1']=['上海','山東','浙江']
Ⅱ 如何利用 Python 讀取數據科學中常見幾種文件
前言
如果你是數據行業的一份子,那麼你肯定會知道和不同的數據類型打交道是件多麼麻煩的事。不同數據格式、不同壓縮演算法、不同系統下的不同解析方法——很快就會讓你感到抓狂!噢!我還沒提那些非結構化數據和半結構化數據呢。
對於所有數據科學家和數據工程師來說,和不同的格式打交道都乏味透頂!但現實情況是,人們很少能得到整齊的列表數據。因此,熟悉不同的文件格式、了解處理它們時會遇到的困難以及處理某類數據時的最佳/最高效的方法,對於任何一個數據科學家(或者數據工程師)而言都必不可少。
在本篇文章中,你會了解到數據科學家或數據工程師必須知道的幾種常規格式。我會先向你介紹數據行業里常用的幾種不同的文件格式。隨後,我會向大家介紹如何在 Python 里讀取這些文件格式。
PS:在後文中提到的數據科學家,同樣也包括數據工程師以及所有的數據科學專家。
目錄
文件格式是什麼。數據科學家應當了解各種不同文件格式的原因。不同的文件格式以及從 Python 中讀取這些文件的方法。
1. 逗號分隔值
2. XLSX
3. ZIP
4. 純文本(txt)
5. JSON
6. XML
7. HTML
8. 圖像
9. 分層數據格式
10. PDF
11. DOCX
12. MP3
13. MP4
1. 文件格式是什麼。
文件格式是計算機為了存儲信息而使用的對信息的特殊編碼方式。首先,文件格式代表著文件的類型,如二進制文件或者 ASCII 文件等。其次,它體現了信息組織的方式。比如,逗號分隔值(CSV)文件格式用純文本來儲存列表數據。
為了識別一個文件的格式,你通常會去看這個文件的擴展名。比如,一個以「CSV」格式保存的名為「Data」的文件下方的文件名會顯示為「Data.csv」。看到「.csv」這個擴展名,我們就會清楚地知道這是一個「CSV」文件,並且還可以知道其中的數據是以表格的形式儲存的。
2. 數據科學家應當了解各種不同文件格式的原因。
通常,你碰到的文件類型取決於你當下構造的應用。舉個例子,在一個圖像處理系統中,你需要把圖像作為輸入和輸出。所以,你所見到的文件大都是jpeg、gif 或者 png 格式的。
作為一個數據科學家,你需要了解各種文件格式的底層結構以及相應的優勢和劣勢。只有了解了數據的底層結構,你才能夠進一步去探索它,或者決定如何來儲存相關的數據。
選擇一個最理想的文件格式來儲存數據能夠提升你的模型在處理數據時的性能。
現在,讓我們討論一下下方這些文件格式以及如何在 Python 中讀取它們:
逗號分隔值(CSV)XLSXZIP純文本(txt)JSONXMLHTML圖像分層數據格式PDFDOCXMP3MP4
3. 不同的文件格式以及從 Python 中讀取這些文件的方法。
3.1 逗號分隔值
逗號分隔值文件格式屬於電子表格文件格式的一種。
什麼是電子表格文件格式?
在電子表格文件格式中,數據被儲存在單元格里。每個單元格都處於特定的行和列中。電子表格文件中的列擁有不同的類型。比如說,它可以是字元串型的、日期型的或者整數型的。最常用的電子表格文件格式包括:逗號分隔值(CSV)、Microsoft Excel 電子表格(xls)以及 Microsoft Excel Open XML 電子表格(xlsx)。
CSV 文件中的每一行都代表一份觀察報告,或者也可以說是一條記錄。每一個記錄都包含一個或者更多由逗號分隔的欄位。
有時你看你會遇到用製表符而非逗號來分隔欄位的文件。這種文件格式被稱為 TSV(製表符分隔值)文件格式。
下面是一個用 Notepad 打開的 CSV 文件。
在Python 中從 CSV 文件里讀取數據
現在讓我們看看如何在 Python 中讀取一個 CSV 文件。你可以用 Python 中的「pandas」庫來載入數據。import pandas as pd
df = pd.read_csv(「/home/Loan_Prediction/train.csv」)
上方的代碼將會把 train.csv 文件載入進 DataFrame df 中。
3.2 XLSX文件
XLSX 是 Microsoft Excel Open XML 的文件格式,它同樣可以歸入電子表格文件格式這一類中。它是由 Microsoft Excel 開發的一種基於 XML 文件格式。Microsoft Office 2007 最先採用 XLSX 格式來儲存數據。
在XLSX 中,數據被放在工作表的單元格和列當中。每個 XLSX 文件可能包含一個或者更多工作表,所以一個工作簿中可能會包含多個工作表。
下面是一個在 Microsoft Excel 中打開的「xlsx」文件。
上圖顯示的這個文件里包含多個工作表,這些工作表的名稱分別為 Customers、Employees、Invoice 和 Order。圖片中顯示的是其中一個工作表——「Invoice」——中的數據。
從XLSX 文件讀取數據
讓我們一起來載入一下來自 XLSX 文件的數據並且定義一下相關工作表的名稱。此時,你可以用 Python 中的「pandas」庫來載入這些數據。import pandas as pd
df = pd.read_excel(「/home/Loan_Prediction/train.xlsx」,sheetname = 「Invoice」)
上方的代碼將會把來自「train.xlsx」文件的工作表「Invoice」載入進 DataFrame df 中。
3.3 ZIP 文件
ZIP 格式是一種歸檔文件格式。
什麼是歸檔文件格式?
在歸檔文件格式中,你可以創建一個包含多個文件和元數據的文件。歸檔文件格式通常用於將多個數據文件放入一個文件中的過程。這么做是為了方便對這些文件進行壓縮從而減少儲存它們所需的存儲空間。
有很多種常用的電腦數據歸檔格式可以創建歸檔文件。Zip、RAR 和 Tar 是最常用的3種用於壓縮數據的歸檔文件格式。
因此,ZIP 文件格式是一種無損壓縮格式,這意味著如果你用 ZIP 格式壓縮了多個文件,那麼在解壓縮之後你能夠完全恢復這些數據。ZIP 文件格式使用多種壓縮演算法來壓縮文件。你可以通過 .zip 這個擴展名輕易地識別出一個 ZIP 文件。
在Python 中讀取 .ZIP 文件
你可以通過導入「zipfile」包來讀取 zip 文件。下方的代碼可以實現讀取「T.zip」中的「train.csv」文件。import zipfile
在這里我已經討論了其中一種最常用的歸檔格式,也已經討論了如何在 python 中打開這種歸檔格式。我不會再對其他的歸檔格式進行展開討論。如果你想了解不同類型的歸檔格式並且想對其做出比較
Ⅲ python解決csv文件用excel打開亂碼問題
【問題】
python輸出的csv文件用excel打開,裡面的中文會變成亂碼,但用window下的記事本或mac下的numbers打開就正常顯示。
原因是python輸出的文件是utf-8編碼寫入的,excel默認以gbk方式讀取,導致亂碼發生。
【解決方法1】文件產出時encoding設置為utf-8-sig
用excel打開csv時,excel會先檢查文件的第一個字元,來了解這個文件是什麼編碼方式,如果這個字元是BOM,excel就知道用utf-8的方式打開這個文件。python自帶了處理BOM的編碼方式uft-8-sig,因此只需要在文件產出時將encoding設置為utf-8-sig。
如果文件不是由python產出的,只需要以utf-8方式讀入再以utf-8-sig方式存儲即可
【解決方法2】懶人法,適用只含簡體中文的文件
用記事本打開,點擊另存為,右下角編碼方式選擇「ANSI」,這個過程是把這個文件改成gbk編碼格式,excel就是默認用gbk方式打開的。
參考: Python寫的csv文件,如何讓 Excel 雙擊打開不亂碼? - 雲+社區 - 騰訊雲
對編碼格式一竅不通的可以閱讀以下網頁
python筆記——二進制和文件編碼_砍柴姑娘Jourosy的博客-CSDN博客
編碼方式之ASCII、ANSI、Unicode概述 - 藍海人 - 博客園
【簡單總結】:
1. 首先需要了解 字元集 和 字元編碼 兩個概念,字元集定義了字元和二進制的一一對應關系,字元編碼規定了如何將字元的編號存儲到計算機中。
2. Unicode是字元集,包含了全球文字的唯一編碼,utf-8是編碼方式,將unicode以某種方式存儲到計算機中。
3. 有些字元集和編碼是結合在一起的,稱作字元集還是編碼都無所謂,比如ASCII,GBK
4. ANSI是各個國家地區不同擴展編碼方式的總稱,互不兼容(可以看出來通用性沒有utf好)
5. 不同編碼方式在轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字元串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
Ⅳ 怎樣用python,讀取excel中的一列數據
就是把xls or xlsx另存為CSV格式,然後再檢索。代碼如下,拋磚引玉。
# -*- coding: cp936 -*-
import linecache
o=open('d:\\test\\14.csv')#文件路徑
o.seek(0)
r=o.readlines()
s1=str(input('輸入要定位的信息:'))
a=0
count=0
for i in r: #按和值組合查找
if i.find(s1)>=0:
print r[a-1]#顯示上一行
print i#顯示定位行
print r[a+1]#顯示下一行
a+=1
print 'Total:%d'%count
例:
在以下數據中,查找含有T的行,並顯示上一行(n行) or 下一行(n行) 。
1,2,3,4
W,R,GFR,T
12,,F,34,G
這個就用上面的代碼就行了。