日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python读取第二行_使用Python操作Excel(二):读取数据表

發(fā)布時(shí)間:2023/12/19 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python读取第二行_使用Python操作Excel(二):读取数据表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一節(jié)我們提到,使用openpyxl可以方便的對數(shù)據(jù)表進(jìn)行操作,例如:抽象Excel數(shù)據(jù)并存入數(shù)據(jù)庫

將數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出到Excel

給一個(gè)已存在的數(shù)據(jù)表追加信息

我們還介紹了一些Excel的基本術(shù)語,在自己本地安裝了openpyxl庫并用庫在本地創(chuàng)建了簡單的Excel文件。

本節(jié)的主要內(nèi)容是使用openpyxl來讀取Excel表,你將掌握閱讀數(shù)據(jù)表的方法,閱讀從簡單到復(fù)雜的各種例子,并將他們轉(zhuǎn)化成Python內(nèi)更有用的數(shù)據(jù)類型。讓我們開始這一最重要的操作吧!

本節(jié)所涉及的數(shù)據(jù)集:Dataset for openpyxl Tutorial – Real Python?realpython.com

本數(shù)據(jù)集來自亞馬遜在線商品評論的真實(shí)數(shù)據(jù),這只是Amazon商品的一小部分,但對于我們學(xué)習(xí)來說也足夠了

請下載本數(shù)據(jù)集并存為“sample.xlsx”

簡單閱讀Excel表格的Python代碼

在上面的代碼中:首先用 load_workbook 方法打開了名為sample.xlsx的數(shù)據(jù)表,然后就可以使用workbook.sheetnames來查看所有你可用的sheet

workbook.active 方法選擇了第一個(gè)可用的sheet

使用該方法是默認(rèn)的打開電子表的方法,在該教程中你會看到很多次

打開數(shù)據(jù)表之后,我們可以很容易的檢索數(shù)據(jù)表:

為了返回這個(gè)單元的具體數(shù)值,你需要使用.value,否則你得到的就會是這個(gè)對象。你也可以使用.cell() 通過指針符號檢索數(shù)據(jù),如下:

記住,要得到單元格的具體值而非單元格這個(gè)對象,就要使用.value來取值

你可以看到,不管你選用上述哪種方式定位單元格并取值,得到的結(jié)果相同。在本課程中,我們更多使用第一種:["A1"]來定位單元格

注意,即使你在Python中使用 0 索引表示法,但在數(shù)據(jù)表中,你需要使用 1 索引法,(也就是說在Python中索引從0開始,但使用openpyxl時(shí)索引從1開始)

上述討論了打開數(shù)據(jù)表最快的方法。然而,你可以通過傳遞其他參數(shù)來改變數(shù)據(jù)表的加載方式。加載方式如下所示。

其他的加載選項(xiàng)

在調(diào)用load_workbook() 時(shí),你可以傳遞一些參數(shù)來改變數(shù)據(jù)表的加載方式。最重要的是如下兩種:read_only:只讀模式允許你打開非常大的Excel文件來加載數(shù)據(jù)表

data_only:僅加載數(shù)據(jù)模式忽略加載公式,而只是加載結(jié)果數(shù)據(jù)

從數(shù)據(jù)表導(dǎo)入數(shù)據(jù)

現(xiàn)在你已經(jīng)學(xué)習(xí)了加載數(shù)據(jù)表的基礎(chǔ),是時(shí)候進(jìn)入有趣的環(huán)節(jié)了:迭代、在數(shù)據(jù)表中正式使用數(shù)值。在這部分,你將會學(xué)到所有你可能會用到的遍歷數(shù)據(jù)方式,同時(shí)也會學(xué)到如何通過轉(zhuǎn)換使得數(shù)據(jù)更加有用,當(dāng)然,是以我們Pythonic方式啦。

遍歷數(shù)據(jù)

根據(jù)不同的需求,有很多種不同的方法轉(zhuǎn)換數(shù)據(jù)。你可以行列結(jié)合來切分?jǐn)?shù)據(jù):

你可以得到行或列的范圍:圖沒有截全,包含了這張表所有A列的數(shù)據(jù)

仍然沒截全,這次依次提取了A,B兩列的數(shù)據(jù),先A后B返回第五行的數(shù)據(jù)返回第五行和第六行的數(shù)據(jù)

你會注意到所有上述所有例子都返回 tuple,如果你想回憶Python如何操作list和tuple的話,請看這篇文章:Lists and Tuples in Python – Real Python?realpython.com

還有多種使用Python生成器來瀏覽數(shù)據(jù)的方法,你能用于實(shí)現(xiàn)的主要有:.iter_rows()

.iter_cols()

這兩個(gè)方法都可以接收如下用于設(shè)置迭代的邊界的參數(shù):min_row

max_row

min_col

max_col

示例如下:按行打印按列打印

你可能注意到了:在使用.iter_rows() 時(shí),你每行得到一個(gè)選中的元組,而當(dāng)你使用.iter_cols()時(shí),你每列得到一個(gè)元組。

在上述的兩個(gè)方法之中你都可以傳遞布爾值“values_only”,當(dāng)該值被設(shè)置為True時(shí),單元格的值而非單元格對象本身被返回:只傳回值

如果你想遍歷整個(gè)數(shù)據(jù)集,那么你可以直接使用.rows,.columns等屬性,這些屬性是.iter_rows() 和.iter_cols() 無參數(shù)時(shí)的特例。按行輸出整個(gè)電子表

使用Python內(nèi)部數(shù)據(jù)結(jié)構(gòu)操作數(shù)據(jù)集:

現(xiàn)在你了解了遍歷電子表格的數(shù)據(jù)的基礎(chǔ),讓我們來看看如何將電子表的數(shù)據(jù)轉(zhuǎn)換到Python的聰明方式吧!

正如你之前所看到的,通過迭代得到的結(jié)果都保存在元組中,然而,元組也不過是個(gè)不可變的列表,所以你可以輕松的獲得元組數(shù)據(jù)并將它們轉(zhuǎn)換為其他結(jié)構(gòu)的數(shù)據(jù)。

例如,假設(shè)你想把sample.xlsx 中的數(shù)據(jù)抽象出產(chǎn)品信息并放進(jìn)一個(gè)以產(chǎn)品id為key的dict,最直接的方法是遍歷所有的行,挑選出你知道的與產(chǎn)品信息有關(guān)的列,然后將其存在字典里。讓我們試試看!

第一步:查看表頭,看看你最關(guān)心的有什么信息該代碼返回了表格中所有的列名

首先,提取出如下列:product_id

product_parent

product_title

product_category

很幸運(yùn)的是,我們想要的數(shù)據(jù)都挨在一起,你可以使用min_col和max_col來很容易得到你想要的信息:打印出想要的數(shù)據(jù)

非常好,你現(xiàn)在已經(jīng)知道如何得到你需要的重要的產(chǎn)品信息了!現(xiàn)在我們把它放進(jìn)字典中:

import json

from openpyxl import load_workbook

workbook = load_workbook(filename="sample.xlsx")

sheet = workbook.active

products = {}

# 使用values_only返回單元格的值

for row in sheet.iter_rows(min_row=2,

min_col=4,

max_col=7,

values_only=True):

product_id = row[0]

product = {

"parent": row[1],

"title": row[2],

"category": row[3]

}

products[product_id] = product

print(json.dumps(products))

這段代碼將表格中除了第二行的每一行,4-7列的每一列打印出來,如圖所示:我在這里使用了pprint做整齊的字典打印, 一共98個(gè)

將數(shù)據(jù)轉(zhuǎn)換到Python類中

為了完成本課程對Excel的讀取部分,我們現(xiàn)在要深入到Python類中,看看你能在上面的案例的基礎(chǔ)上如何提升并對數(shù)據(jù)進(jìn)行更好的結(jié)構(gòu)化。

關(guān)于數(shù)據(jù)類的教程我們將在其他專欄中專門介紹,為了完成上述目的,你應(yīng)該使用從Python3.7開始支持的數(shù)據(jù)類。如果你使用老版本的Python,你可以使用默認(rèn)的類來替代。

在一切開始之前,讓我們看看你有什么數(shù)據(jù),并且決定你想保存哪些,怎么保存吧。

正如你在開始看到的,這些數(shù)據(jù)來源于亞馬遜的商品評論列表,你可以在如下鏈接查看這些數(shù)據(jù)的所有屬性及其含義:https://s3.amazonaws.com/amazon-reviews-pds/tsv/index.txt?s3.amazonaws.com

從數(shù)據(jù)中,有如下兩個(gè)明顯元素你可以從中提取:Product

Reviews

每個(gè)產(chǎn)品有:ID

Title

Parent

Category

評論有如下字段:ID

Customer ID

Stars

Headline

Body

Date

import datetime

from dataclasses import dataclass

@dataclass

class Product:

id: str

parent: str

title: str

category: str

@dataclass

class Review:

id: str

customer_id: str

stars: int

headline: str

date: datetime.datetime

在定義你的數(shù)據(jù)類型之后,你需要將數(shù)據(jù)表中的數(shù)據(jù)轉(zhuǎn)換到這些新的數(shù)據(jù)結(jié)構(gòu)中。

在做這個(gè)轉(zhuǎn)換之前,我們應(yīng)該再次查看數(shù)據(jù)頭,在列和字段之間創(chuàng)建映射關(guān)系:第一種遍歷法第二種遍歷法

讓我們創(chuàng)建一個(gè)文件mapping.py,在這個(gè)文件中包含所有字段名和他們的列的位置的列表。

你并不一定要執(zhí)行上面的映射,但解析行數(shù)據(jù)時(shí)這樣做更具有可讀性,這樣的話在執(zhí)行結(jié)束后不會有一堆看起來奇怪的數(shù)字。

最后,讓我們看看解析單元表數(shù)據(jù)到一個(gè)包含很多產(chǎn)品和評論的對象的列表需要哪些代碼:

from datetime import datetime

from openpyxl import load_workbook

from classes import Product, Review

from mapping import PRODUCT_CATEGORY, PRODUCT_ID, PRODUCT_PARENT, PRODUCT_TITLE, \

REVIEW_DATE, REVIEW_STARS, REVIEW_ID, REVIEW_BODY, REVIEW_HEADLINE, REVIEW_CUSTOMER

# Using the read_only method since we are not gonna be editing the spreadsheet

workbook = load_workbook(filename="sample.xlsx", read_only=True)

sheet = workbook.active

products = []

reviews = []

# Using the values_only for we just want to return the cell value

for row in sheet.iter_rows(min_row=2, values_only=True):

product = Product(

id=row[PRODUCT_ID],

parent=row[PRODUCT_PARENT],

title=row[PRODUCT_TITLE],

category=row[PRODUCT_CATEGORY]

)

products.append(product)

# we need to parse the data from the spreadsheet into a datetime format

spread_date = row[REVIEW_DATE]

parsed_date = datetime.strptime(spread_date, "%Y-%m-%d")

review = Review(

id=row[REVIEW_ID],

customer_id=row[REVIEW_CUSTOMER],

stars=row[REVIEW_STARS],

headline=row[REVIEW_BODY],

date=parsed_date

)

reviews.append(review)

print(products[0])

print(reviews[0])

運(yùn)行該代碼后,得到如下輸出:

這就對了! 現(xiàn)在你得到了如此簡單易懂的類形式的數(shù)據(jù),你可以開始考慮將他們存在數(shù)據(jù)庫里,或者任何別的類型的形式了!

使用這種面向?qū)ο蟮牟呗詠斫馕鰯?shù)據(jù)表使得以后處理數(shù)據(jù)如此簡單!

總結(jié)

以上是生活随笔為你收集整理的python读取第二行_使用Python操作Excel(二):读取数据表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。