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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

上一節我們提到,使用openpyxl可以方便的對數據表進行操作,例如:抽象Excel數據并存入數據庫

將數據庫數據導出到Excel

給一個已存在的數據表追加信息

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

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

本節所涉及的數據集:Dataset for openpyxl Tutorial – Real Python?realpython.com

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

請下載本數據集并存為“sample.xlsx”

簡單閱讀Excel表格的Python代碼

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

workbook.active 方法選擇了第一個可用的sheet

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

打開數據表之后,我們可以很容易的檢索數據表:

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

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

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

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

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

其他的加載選項

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

data_only:僅加載數據模式忽略加載公式,而只是加載結果數據

從數據表導入數據

現在你已經學習了加載數據表的基礎,是時候進入有趣的環節了:迭代、在數據表中正式使用數值。在這部分,你將會學到所有你可能會用到的遍歷數據方式,同時也會學到如何通過轉換使得數據更加有用,當然,是以我們Pythonic方式啦。

遍歷數據

根據不同的需求,有很多種不同的方法轉換數據。你可以行列結合來切分數據:

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

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

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

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

.iter_cols()

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

max_row

min_col

max_col

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

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

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

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

使用Python內部數據結構操作數據集:

現在你了解了遍歷電子表格的數據的基礎,讓我們來看看如何將電子表的數據轉換到Python的聰明方式吧!

正如你之前所看到的,通過迭代得到的結果都保存在元組中,然而,元組也不過是個不可變的列表,所以你可以輕松的獲得元組數據并將它們轉換為其他結構的數據。

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

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

首先,提取出如下列:product_id

product_parent

product_title

product_category

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

非常好,你現在已經知道如何得到你需要的重要的產品信息了!現在我們把它放進字典中:

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個

將數據轉換到Python類中

為了完成本課程對Excel的讀取部分,我們現在要深入到Python類中,看看你能在上面的案例的基礎上如何提升并對數據進行更好的結構化。

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

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

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

從數據中,有如下兩個明顯元素你可以從中提取:Product

Reviews

每個產品有: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

在定義你的數據類型之后,你需要將數據表中的數據轉換到這些新的數據結構中。

在做這個轉換之前,我們應該再次查看數據頭,在列和字段之間創建映射關系:第一種遍歷法第二種遍歷法

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

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

最后,讓我們看看解析單元表數據到一個包含很多產品和評論的對象的列表需要哪些代碼:

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])

運行該代碼后,得到如下輸出:

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

使用這種面向對象的策略來解析數據表使得以后處理數據如此簡單!

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。