python 处理xml pandas_Python数据处理分析,解决pandas中所有的Excel疑难杂症(上)
發現許多小伙伴入門Python幾個月,還是低效率做數據處理。這套課程以形象的示意圖,精心安排的案例,循序漸進帶你玩轉數據處理分析神器——pandas,課程中還有分析案例噢,干貨滿滿!
前言
經過前2個階段,22節課的學習,相信大家已經能夠應用 pandas 解決一些實際問題。
不過,前2個階段算是入門內容,主要讓你了解 pandas 的整體概念及其常用方法。
你會發現這些方法中有許多參數,看著就一頭霧水,接下來第3階段我們將深入每個應用場景,詳細講解這些方法的使用,首先講解的是數據加載相關知識。
多種數據來源
有小伙伴會問:這課程的數據不是 csv 文件就是 excel 文件了,pandas 還可以從其他類型的文件獲取數據嗎
實際上,pandas 支持的數據源非常多,有一些你可能都沒想到,先看看他的數據源支持列表:
可以看到有3種大類(文本、二進制、SQL)
其中有許多我們很少聽說的格式(Feather Format、Parquet Format)
不僅是 csv ,網頁數據和 json 文件都可以直接加載,就連本地的剪切板都能支持
此外,由于 pandas 可以通過 python 內置數據結構(字典、列表等)來構造 DataFrame,因此即使是上述列表沒有支持的格式(比如 xml),我們也同樣可以結合其他第三方庫輕松實現
本專欄會詳細講解的數據源如下:
excel
csv
Feather Format
SQL
本文先講解 excel 相關的。
小伙伴:'這么簡單的內容也需要講解?不就是一個 read_excel 就搞定的事情嗎'
其實這加載方式的方法都有許多參數,同時也有一些坑,我們開始吧
案例1:加載數據
小伙伴:加載數據這么簡單也好意思說?
'看下去你就知道里面存在很多小技巧'
從一個 Excel 文件加載一個工作表到 DataFrame 是非常容易:
pd.read_excel('data/data_sp4.xlsx','1')
第一參數是文件的所在路徑(絕對路徑或相對路徑)
第二參數是 Excel 文件中的工作表名字,注意,名字總是字符串
關于相對路徑等知識,請查看我的'Python入門必備系列'文章 建議大家使用此方法的前2個參數時,不要把參數名字寫出來,因為在舊版本的 pandas 中,第二參數的名字有所不同,有時候會出現難以查錯的情況
小伙伴:那么如果需要加載一個 Excel 的2個工作表,是不是就要寫2次pd.read_excel ?
pandas 當然不會這么折磨人,直接看看代碼:
當第二參數傳入字符串列表時,他會同時加載指定的工作表
結果是一個有順序的字典
為什么要強調 字符串列表 ?因為你也可以通過位置來指定工作表,比如:[0,1] 表示加載第一個和第二個工作表。位置總是用 數值列表 表示
那怎么訪問每個工作表的數據呢:
df['1'],你就當作是普通的字典即可,通過工作表名字即可獲得對應的數據 DataFrame
小伙伴:好吧,這樣也算方便,但是我現在需要整個文件所有的工作表,但我不知道他們的名字呀。
pandas 當然也考慮到這點:
當第二參數設置為 None 時,他會加載所有的工作表
案例2:表頭不在首行
Excel 的數據格式經常會讓你有驚喜,比如有一次同事給你一個如下的數據表:
表格的前2行是一個大標題,對我們來說是沒有用的數據。
有效的標題行在第3行
前2列是空列
面對這樣的數據,如果只是簡單調用 pd.read_excel() ,只能得到如下的效果:
默認情況下,pandas 會把首行作為 DataFrame 的表頭(columns),這是 header 參數的作用,其值默認為0,表示第1行(0表示第一行,1表示第二行,以此類推)
所有的列都被加載
我們可以通過簡單設置 header 參數,讓其把第3行作為表頭:
設置 header = 2,表示使用第3行作為表頭,pandas 會自動跳過前2行
案例3:只加載部分列的數據
但是,上一個例子中的前2列仍然是沒用的空列,我們可以通過參數 usecols 完成任務:
設置 usecols=['日期', '銷量'],讓其只保留 日期 與 銷量 2列
有人抬杠說到:有時候我也不知道具體列的表頭名字,反正我就是要加載第3和第4列。如下:
注意此時的表頭不是叫 '日期' 與 '銷量'
我們同樣可以通過 usecols 完成:
usecols=[2, 3],當這參數設置為數值列表時,他就知道你要的是指定位置的列
當 usecols 指定為字符串列表時,他會認為你要指定列名字(名字都是字符串呀)
此外,我們還可以通過 Excel 的列號指定:
usecols='C,D' ,當參數設置為單個字符串時,就認為是 Excel 的列號,這表示讀取 C 和 D 列
如果你熟悉 Excel 的公式,此方式還可以設置區間,比如 'A,C:E',表示讀取 A,C至E 列,總共4列數據
有一次小伙伴真遇到大難題了,他發現拿到的 Excel 數據的有效列的位置不是固定的,如下:
有可能需要的數據是在不同的列上
那么有沒有一種方法可以不管列在哪里,都只加載有效的列呢?
既然這里有提出來,自然就有辦法解決,先看看如果不指定參數 usecols 的情況:
前4列的第3行由于是空值,因此 pandas 會默認使用 Unnamed:序號 作為這些表頭的名字
那么我們可以通過這個邏輯去把這些列去掉:
usecols=lambda n: n.find('Unnamed') < 0,當 usecols 是一個可執行的對象時(任何的方法或 lambda),那么 pandas 就會把列名字逐一輸入到這個方法中,當方法執行結果為 True,則保留此列
n.find('Unnamed') ,n 就是列名字,是一個字符串,調用其 find 方法查找字符串 Unnamed ,如果找不到,則此方法返回 -1
因此,整個 usecols 設置的語義是:名字中找不到 Unnamed 的列 ,給我保留下來吧
看看如下示意圖:
總結
本節重點掌握以下知識:
pd.read_excel ,前2個參數分別是 Excel 文件路徑、數據所在工作表名字
header 參數指定表頭位置
usecols 指定加載的列名字(也可以是位置或自定義邏輯)
pd.read_excel 方法實際有多達10+個參數,但實際上常用的參數不多,以后我找到他們的實戰應用案例再分享。
下一節講解輸出 Excel 的知識,看看怎么解決 to_excel 方法覆蓋原文件內容的問題
總結
以上是生活随笔為你收集整理的python 处理xml pandas_Python数据处理分析,解决pandas中所有的Excel疑难杂症(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重生1990卖小龙虾起家的小龙虾是什么梗
- 下一篇: websocket python爬虫_p