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

歡迎訪問 生活随笔!

生活随笔

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

python

python 处理xml pandas_Python数据处理分析,解决pandas中所有的Excel疑难杂症(上)

發布時間:2024/9/27 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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疑难杂症(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

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