1. 程式人生 > 其它 >python - excel檔案讀寫

python - excel檔案讀寫

安裝對應的包:pandas、xlsrd、openpyxl

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests pandas

pip install xlrd==1.2.0

pip install openpyxl

1.讀取

例如:原始表格如下:

方法一(較簡潔,推薦使用):

import pandas as pd  # 匯入pandas包

file = './abc1.csv'
# 讀取檔案 1.io:excel檔案路徑  2.sheet_name:sheet頁簽名字  3.header:略過表頭(預設0:第一行,None:不略過)
# 這種方法對於xlsx、xls、csv格式的檔案,均可讀取
data = pd.read_excel(io=file, sheet_name='Sheet1', header=0) print(len(data)) # 資料行的行數(不包括表頭) print(data.values) # 表中資料(不包括表頭) for val in data.values: # 逐行列印資料 print(val) print(data.head()) # 列印包括表頭在內的所有資料

列印結果如下:

方法二:

import xlrd  # 匯入xlrd包

# 這種方法對xlsx、xls、csv均適用
file1 = '/Users/zhangyang/PycharmProjects/untitled/abc1.xlsx
' workbook = xlrd.open_workbook(filename=file1) # 開啟工作表 booksheet = workbook.sheet_by_index(0) # 獲取sheet頁(通過索引,0:第一個) booksheet1 = workbook.sheet_by_name('Sheet1') # 獲取sheet頁(通過sheet頁名稱) print(booksheet1.nrows) # nrows獲取總行數(包括表頭),nclos獲取總列數 for i in range(booksheet1.nrows): print(booksheet1.row_values(i)) #
列印整行 for i in range(booksheet1.nrows): print(booksheet1.row_values(i, 1, 2)) # 列印每行中的某幾列 print(booksheet1.cell_value(1, 2)) # 列印某個單元格

列印結果如下:

2. 寫入

方法一(僅支援xls、xlsx,不支援csv):

import numpy as np
import pandas as pd

data1 = np.random.randint(0, 101, size=[5, 3])  # 資料:1-888之間,5行3列的列表
colum = ['語文', '數學', '英語']   # 列標題
index = ['a', 'b', 'c', 'd', 'e']  # 行標題

df1 = pd.DataFrame(data=data1, columns=colum, index=index)  # 建立pandas資料框架,傳入資料、列標題、行標題

df1.to_excel('./salary.xls',   # excel檔名
             sheet_name='salary11',  # sheet頁名字
             header=True,  # 是否展示列標題
             index=True)  # 是否展示行標題

結果如下:

ps1:如果不展示行列標題:

import numpy as np
import pandas as pd

data1 = np.random.randint(0, 101, size=[5, 3])  # 資料:1-888之間,5行3列的列表
colum = ['語文', '數學', '英語']   # 列標題
index = ['a', 'b', 'c', 'd', 'e']  # 行標題

df1 = pd.DataFrame(data=data1, columns=colum, index=index)  # 建立pandas資料框架,傳入資料、列標題、行標題

df1.to_excel('./score.xls',   # excel檔名
             sheet_name='score1',  # sheet頁名字
             header=False,  # 是否展示列標題
             index=False)  # 是否展示行標題

結果如下:

ps2:如果未傳入行列標題,但又想展示,會使用預設值0123:

import numpy as np
import pandas as pd

data1 = np.random.randint(0, 101, size=[5, 3])  # 資料:1-888之間,5行3列的列表
colum = ['語文', '數學', '英語']   # 列標題
index = ['a', 'b', 'c', 'd', 'e']  # 行標題

df1 = pd.DataFrame(data=data1)  # 建立pandas資料框架,傳入資料、列標題、行標題

df1.to_excel('./score.xls',   # excel檔名
             sheet_name='score1',  # sheet頁名字
             header=True,  # 是否展示列標題
             index=True)  # 是否展示行標題

結果如下:

ps3:如果一次寫入多個sheet頁

import pandas as pd

data1 = np.random.randint(0, 101, size=[5, 3])  # 資料1
colum1 = ['語文', '數學', '英語']   # 列標題1
data2 = np.random.randint(0, 101, size=[8, 2])  # 資料2
colum2 = ['化學', '物理']   # 列標題2

df1 = pd.DataFrame(data=data1, columns=colum1)
df2 = pd.DataFrame(data=data2, columns=colum2)


with pd.ExcelWriter('./score.xls') as writer:
    df1.to_excel(writer, sheet_name='sheet101', header=True, index=False),  # 寫入sheet1
    df2.to_excel(writer, sheet_name='sheet102', header=True, index=False)   # 寫入sheet2

結果如下:

方法二:

程式碼如下(對應讀取中的方法二):

import xlwt  # 匯入包

file1 = '/Users/zhangyang/PycharmProjects/untitled/abc2.csv'

header = ['id', 'name']

content = [['1', 'zhangsan'],
           ['2', 'lisi'],
           ['3', 'wangmazi']]

# 該方法對xlsx、xls、csv均適用
workbook = xlwt.Workbook(encoding='utf-8')  # 1. 建立一個workboot物件(工作表)
booksheet = workbook.add_sheet('sheet1', cell_overwrite_ok=True)  # 2. 新增sheet頁

row = 0
for col in range(len(header)):
    booksheet.write(row, col, header[col])  # 3. 寫單元格(列頭)

for line in content:
    row += 1
    for col in range(len(line)):
        booksheet.write(row, col, line[col])  # 3. 寫單元格(內容)

workbook.save(file1)  # 4. 儲存檔案

寫入結果如下: