資料分析從零開始實戰 | 基礎篇(三)
閱讀文字大概需要12分鐘。
零、寫在前面
前面兩篇文章基礎篇(一)和基礎篇(二)講了資料分析虛擬環境建立和pandas讀寫csv、tsv、json格式的資料,今天我們繼續探索pandas讀取資料。
本系列學習筆記參考書籍:《資料分析實戰》托馬茲·卓巴斯
一、基本知識概要
1.利用pandas讀寫Excel檔案
2.利用pandas讀寫XML檔案
二、開始動手動腦
1.利用Python讀寫Excel
讀取,利用Pandas庫的ExcelFile()方法。
寫入,利用
程式碼
import pandas as pd
import os
# 獲取當前檔案父目錄路徑
father_path = os.getcwd()
# 原始資料檔案路徑
rpath_excel = father_path+r'\data01\realEstate_trans.xlsx'
# 資料儲存路徑
wpath_excel = father_path+r'\data01\temp_excel.xlsx
# 開啟excel檔案
excel_file = pd.ExcelFile(rpath_excel)
# 讀取檔案內容
"""
ExcelFile物件的parse()方法讀取指定工作表的內容
ExcelFile物件的sheet_names屬性可以獲取Excel檔案中的所有工作表
這裡還用到了字典表示式來給字典賦值(看起來更加優雅)
"""
excel_read = {sheetName : excel_file.parse(sheetName) for sheetName in excel_file.sheet_names}
# 輸出Sacramento表格的price列的頭10行記錄
print(excel_read['Sacramento'].head(10)['price'])
print(type(excel_read['Sacramento'].head(10)['price']))
# 遇到錯誤:ModuleNotFoundError: No module named 'xlrd'
# 寫入表格的price列的前10行
excel_read['Sacramento'].head(10)['price'].to_excel(wpath_excel, "price", index=False)
# 遇到錯誤:ModuleNotFoundError: No module named 'openpyxl'
讀取結果:
寫入結果:
可能報錯:
讀操作時:
ModuleNotFoundError: No module named 'xlrd'
寫操作時:
ModuleNotFoundError: No module named 'openpyxl'
解決方法:
# 在環境裡安裝xlrd和openpyxl模組即可
pip install xlrd
pip install openpyxl
2.利用Python讀寫XML檔案
學過java的同學對XML應該不陌生,全稱是eXtensible Markup Language(擴充套件標記語言),雖然平時不常見,但是Web API裡支援XML編碼。
讀寫程式碼
import pandas as pd
# 一個輕量的XML解析器
import xml.etree.ElementTree as ET
import os
"""
讀入XML資料,返回pa.DataFrame
"""
def read_xml(xml_FileName):
with open(xml_FileName, "r") as xml_file:
# 讀取資料,以樹的結構儲存
tree = ET.parse(xml_file)
# 訪問樹的梗節點
root = tree.getroot()
# 返回DataFrame格式資料
return pd.DataFrame(list(iter_records(root)))
"""
遍歷有記錄的生成器
"""
def iter_records(records):
for record in records :
# 儲存值的臨時字典
temp_dict = {}
# 遍歷所有欄位
for var in record:
temp_dict[
var.attrib["var_name"]
] = var.text
# 生成值
yield temp_dict
"""
以XML格式儲存資料
"""
def write_xml(xmlFileName, data):
with open(xmlFileName, "w") as xmlFile:
# 寫頭部
xmlFile.write(
'<?xml version="1.0" encoding="UTF-8"?>'
)
xmlFile.write('<records>\n')
# 寫資料
xmlFile.write(
'\n'.join(data.apply(xml_encode, axis=1))
)
# 寫尾部
xmlFile.write("\n</records>")
"""
以特定的巢狀格式將每一行編碼成XML
"""
def xml_encode(row):
# 第一步--輸出record節點
xmlItem = [' <record>']
# 第二步--給行中每個欄位加上XML格式<field name=···>···</field>
for field in row.index:
xmlItem.append(
'<var var_name="{0}">{1}</var>'.format(field, row[field])
)
# 最後一步--標記record節點的結束標籤
xmlItem.append(" </record>")
return '\n'.join(xmlItem)
# 獲取當前檔案父目錄路徑
father_path = os.getcwd()
# 原始資料檔案路徑
rpath_xml = father_path+r'\data01\realEstate_trans.xml'
# 資料儲存路徑
wpath_xml = father_path+r'\data01\temp_xml.xml'
# 讀取資料
xml_read = read_xml(rpath_xml)
# 輸出頭10行記錄
print(xml_read.head(10))
# 以XML格式寫回檔案
write_xml(wpath_xml, xml_read.head(10))
執行結果
程式碼解析
(1)read_xml(xml_FileName)函式
功能:讀入XML資料,返回pa.DataFrame
這裡利用到了一個輕量級的XML解析器:xml.etree.ElementTree。傳入檔名,先讀取檔案內容,然後利用parse()函式解析XML,建立一個樹狀結構並存放在tree變數中,在tree物件上呼叫getroot()方法得到根節點,最後呼叫iter_records()函式,傳入根節點,進而將返回的資訊轉換成DataFrame。
(2)iter_records(records)函式
功能:遍歷有記錄的生成器
iter_records()方法是一個生成器,從關鍵字yield
可以看出來,如果你不瞭解生成器,可以點選這裡,與return不同,生成器每次只向主調方法返回一個值,直到結束。
(3)write_xml(xmlFile, data)函式
功能:以XML格式儲存資料
這裡需要注意的是得按XML檔案格式進行儲存,我們要做的就是三步:儲存頭部格式、按格式儲存資料、儲存尾部格式。儲存資料時用到了DataFrame物件的apply()方法,遍歷內部每一行,第一個引數xml_encode指定了要應用到每一行記錄上的方法,axis=1表示按行處理,預設值為0,表示按列處理。
(4)xml_encode(row)函式
功能:以特定的巢狀格式將每一行編碼成XML
在寫資料的過程我們會呼叫這個方法,對每行資料進行處理,變成XML格式。
三 、送你的話
昨天開了個會,然後思考了寫問題,這裡分享給大家:
1、思想覺悟,辯證思考。不要隨聲附和,要有己見,聰明的人應該是堅持輸出自己的思想,從事情本身和和他人評論去思考,再辯正自己的思考,再輸出;
2、少喊口號,多做實事。本來我是很推崇做個人規劃的,但是,我發現不止是我周邊和某些讀者朋友,包括我自己,規劃作的越來越假大空,規劃本身沒有錯,錯的是:現實生活中我們把規劃變成了日日口號,而為能如實完成,所以我現在推崇:規劃,先做再說。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556503/viewspace-2637300/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料分析從零開始實戰 | 基礎篇(二)
- 資料分析從零開始實戰 | 基礎篇(一)
- 從零開始學AB測試:基礎篇
- Re:從零開始的Linux之路(基礎篇)Linux
- 從零開始資料分析01--什麼是資料分析
- 從零開始資料分析:一個資料分析師的資料分析流程
- 資料運營實戰(三):用資料說話,從埋點開始
- Git/小白從零開始篇Git
- 從零開始——GO語言基礎語法Go
- 從零開始-基礎流程圖編輯庫流程圖
- 從零開始教你用vuepress搭建自己的部落格(1)—基礎篇Vue
- 資料視覺化Seaborn從零開始學習教程(三) 資料分佈視覺化篇視覺化
- 從零開始學 Python 之基礎語法Python
- 從零開始搭建React應用(一)——基礎搭建React
- Docker從零開始製作基礎映象之CentosDockerCentOS
- Java 執行緒基礎,從這篇開始Java執行緒
- 從零開始寫一個微前端框架-資料通訊篇前端框架
- 從零開始實現multipart/form-data資料提交ORM
- javaSE從零開始04_java的基礎語法Java
- Kotlin基礎篇——從型別系統開始Kotlin型別
- 資料分析 | 零基礎入門資料分析(一):從入門到摔門?
- Android從零開始(第三篇)MVP架構搭建AndroidMVP架構
- 大資料零基礎由入門到實戰大資料
- 從零開始實現一個RPC框架(三)RPC框架
- 電商資料分析全攻略:從零開始提升運營效率
- 從零開始寫一個node爬蟲(上)—— 資料採集篇爬蟲
- 從零開始學Electron筆記(三)筆記
- 大資料系列零基礎由入門到實戰大資料
- 從零開始玩轉 PerfDogService Demo 解析篇Gse
- 從零開始玩轉 PerfDogService Demo解析篇Gse
- 從零開始玩轉 PerfDogService---------初探篇Gse
- 從零開始玩轉PerfDogService---------初探篇Gse
- 從零開始打造 Mock 平臺 - 核心篇Mock
- 從零開始學Python資料分析【17】-- matplotlib(面積圖)Python
- 從零開始實現線上直播
- 從零開始實現資料庫自動化巡檢(一)資料庫
- 從零開始 Mask RCNN 實戰:基於 Win10 的 Mask RCNN 環境搭建CNNWin10
- 從零開始學Linux運維難嗎?Linux基礎Linux運維