Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
為一名在數(shù)據(jù)行業(yè)打拼了兩年多的數(shù)據(jù)分析師,雖然目前收入還算ok,但每每想起房?jī)r(jià),男兒三十還未立,內(nèi)心就不免彷徨不已~
兩年時(shí)間里曾經(jīng)換過一份工作,一直都是從事大數(shù)據(jù)相關(guān)的行業(yè)。目前是一家企業(yè)的BI工程師,主要工作就是給業(yè)務(wù)部門出報(bào)表和業(yè)務(wù)分析報(bào)告。
回想自己過去的工作成績(jī)也還算是不錯(cuò)的,多次通過自己分析告,解決了業(yè)務(wù)的疑難雜癥,領(lǐng)導(dǎo)們各種離不開。
但安逸久了總會(huì)有點(diǎn)莫名的慌張,所以我所在的這個(gè)崗位未來會(huì)有多大發(fā)展空間,十年之后我能成為什么樣的人呢?自己的收入空間還有多少?
一番惆悵之后,別再問路在何方了,于是抄起自己的“家伙”,花了一小會(huì)時(shí)間爬了智聯(lián)招聘上BI崗位的數(shù)據(jù)信息,做了個(gè)分析。
PS:所用工具為Python+BI
數(shù)據(jù)分析的過程如同燒一頓飯,先要數(shù)據(jù)采集(買菜),然后數(shù)據(jù)建模(配菜)、數(shù)據(jù)清洗(洗菜)、數(shù)據(jù)分析(做菜)、數(shù)據(jù)可視化(擺盤上菜)。
所以第一步,要采集/選擇數(shù)據(jù)。
選擇智聯(lián)招聘,通過Python來進(jìn)行“BI工程師”的關(guān)鍵數(shù)據(jù)信息的爬取,這里大家也可以試著爬取自己崗位的關(guān)鍵詞,如“數(shù)據(jù)分析師”、“java開發(fā)工程師 ”等。經(jīng)過F12分析調(diào)試,數(shù)據(jù)是以JSON的形式存儲(chǔ)的,可以通過智聯(lián)招聘提供的接口調(diào)用返回。
那么我這邊通過Python對(duì)智聯(lián)招聘網(wǎng)站的數(shù)據(jù)進(jìn)行解析,爬取了30頁(yè)數(shù)據(jù),并且將崗位名稱、公司名稱、薪水、所在城市、所屬行業(yè)、學(xué)歷要求、工作年限這些關(guān)鍵信息用CSV文件保存下來。
附上完整Python源碼:
import requests import json import csv from urllib.parse import urlencode import time def saveHtml(file_name,file_content): #保存conten對(duì)象為html文件 with open(file_name.replace('/','_')+'.html','wb') as f: f.write(file_content) def GetData(url,writer):#解析并將數(shù)據(jù)保存為CSV文件 response=requests.get(url) data=response.content saveHtml('zlzp',data) #保存html文件 jsondata=json.loads(data) dataList=jsondata['data']['results'] #print(jsondata) for dic in dataList: jobName=dic['jobName'] #崗位名稱 company=dic['company']['name'] #公司名稱 salary=dic['salary'] #薪水 city=dic['city']['display'] #城市 jobtype=dic['jobType']['display'] #所屬行業(yè) eduLevel=dic['eduLevel']['name'] #學(xué)歷要求 workingExp=dic['workingExp']['name'] #工作經(jīng)驗(yàn) print(jobName,company,salary,city,jobtype,eduLevel,workingExp) writer.writerow([jobName,company,salary,city,jobtype,eduLevel,workingExp]) param={ 'start':0, 'pageSize':60, 'cityId':489, 'workExperience':-1, 'education':-1, 'companyType': -1, 'employmentType': -1, 'jobWelfareTag': -1, 'kw': 'BI工程師', #搜索關(guān)鍵詞,可以根據(jù)你需要爬取的崗位信息進(jìn)行更換 'kt': 3, 'lastUrlQuery': {"p":1,"pageSize":"60","jl":"681","kw":"python","kt":"3"} }#參數(shù)配置 pages=range(1,31)#爬取1-30頁(yè)數(shù)據(jù) out_f=open('test.csv', 'w', newline='') writer=csv.writer(out_f) writer.writerow(['jobName','company','salary','city','jobtype','eduLevel','workingExp']) for p in pages: #自動(dòng)翻頁(yè) param['start']=(p-1)*60 param['lastUrlQuery']['p']=p url='https://fe-api.zhaopin.com/c/i/sou?' + urlencode(param) GetData(url,writer) time.sleep(3)#間隔休眠3秒,防止IP被封 print(p) out_f.close()
經(jīng)過一番編譯調(diào)試,代碼成功運(yùn)行。
全部數(shù)據(jù)爬取完畢,一共1800條,保存在本地CSV文件中。
數(shù)據(jù)是爬到了,具體我想了解哪些信息呢:各城市的BI崗位需求情況以及薪資水平;薪水隨工作經(jīng)驗(yàn)的漲幅情況,以及有哪些具體的高薪崗。
由此可見,想要分析的角度很多,且看了源數(shù)據(jù),還要做不少的數(shù)據(jù)處理。最簡(jiǎn)單快速出可視化的方法自然是用BI工具,來對(duì)數(shù)據(jù)做簡(jiǎn)單清洗加工,并呈現(xiàn)可視化。
BI能應(yīng)付絕大多數(shù)場(chǎng)景的數(shù)據(jù)分析,尤其擅長(zhǎng)多維數(shù)據(jù)切片,不需要建模;甚至數(shù)據(jù)清洗環(huán)節(jié)也能放在前端,通過過濾篩選、新建計(jì)算公式等來解決。最后呈現(xiàn)可視化,并可設(shè)計(jì)數(shù)據(jù)報(bào)告。
這里我用FineBI來做這樣一份分析。
FineBI做分析大體是這樣的流程:連接/導(dǎo)入數(shù)據(jù)——數(shù)據(jù)處理/清洗(過濾、篩選、新增公式列)——探索式分析——數(shù)據(jù)可視化——出報(bào)告。
1.薪水上下限分割:
將CSV文件數(shù)據(jù)導(dǎo)入FineBI中(新建數(shù)據(jù)鏈接,建立一個(gè)分析業(yè)務(wù)包,然后導(dǎo)入這張excel表)。因?yàn)樾剿且詘xK-xxk(還有一些類似校招/薪資面議的數(shù)據(jù))的形式進(jìn)行存儲(chǔ)的,我這邊使用FineBI新增公式列(類似excel函數(shù))將這些字符進(jìn)行分割:
薪水下限(數(shù)值):left( indexofarray ( split (salary,"-") ,1),find( "K",INDEXOFARRAY( split(salary,"-") ,1))-1)
薪水上限(含K字符):right ( indexofarray( split(salary,"-") ,2),len(salary)- find("K",indexofarray(split(salary,"-"),2 ) ) )
薪水上限(數(shù)值):left( 薪水上限(文本),find("K",薪水上限(文本))-1 )
這樣就得到每個(gè)崗位的數(shù)值格式的薪水區(qū)間了:
2.臟數(shù)據(jù)清洗:
瀏覽了一下數(shù)據(jù),沒有大問題,但是發(fā)現(xiàn)里面有一些類似BIM工程師的崗位信息,這些應(yīng)該都是土木行業(yè)的工程師,這邊我直接過濾掉即可(不包含“BIM”且不包含“bim”)。
3.崗位平均數(shù)據(jù)計(jì)算
再新增列,平均薪水=(薪水下限+薪水上限)/2,即可得到每個(gè)崗位的平均薪水。
4.真實(shí)城市截取
由于城市字段存儲(chǔ)有的數(shù)據(jù)為“城市-區(qū)域”格式,例如“上海-徐匯區(qū)”,為了方便分析每個(gè)城市的數(shù)據(jù),最后新增列“城市”,截取“-”前面的真實(shí)城市數(shù)據(jù)。
城市:if(find("-",city)>0 , left(city, find("-",city)-1 ),city)
至此,18000多條數(shù)據(jù)差不多清洗完畢,食材已經(jīng)全部準(zhǔn)備好,下面可以正式開始數(shù)據(jù)可視化的美食下鍋烹飪。
數(shù)據(jù)可視化可以說是很簡(jiǎn)單了,拖拽要分析的數(shù)據(jù)字段即可。
但是這里用finebi分析要理解一個(gè)思路。常規(guī)我們用excel做分析或者說做圖表,是先選用鉆則圖表然后設(shè)定系列、數(shù)值。這里沒有系列和數(shù)值的概念,只有橫軸和豎軸。拖入什么字段,該字段就以該軸進(jìn)行擴(kuò)展,至于圖表嘛,finebi會(huì)自動(dòng)判別推薦。
我這邊以各城市平均薪水/崗位數(shù)量分析為例給大家簡(jiǎn)單展示FineBI的可視化呈現(xiàn)過程。
1、橫軸以“城市”字段擴(kuò)展,展現(xiàn)兩類數(shù)據(jù)。先是薪水值,拖拽到縱軸,默認(rèn)對(duì)數(shù)值類的字段是匯總求和的。點(diǎn)擊字段可直接對(duì)改字段修改計(jì)算、過濾等操作。
此圖來自官網(wǎng),圖中數(shù)據(jù)不是本次分析的數(shù)據(jù),僅供參考
2、然后分析每個(gè)城市BI崗位的情況。將數(shù)據(jù)記錄數(shù)這個(gè)指標(biāo)拖入到縱軸展示。同樣的方式,可以修改字段名。這里為了區(qū)分兩者,將其修改為折線圖,并且倒敘展示。
同理,其他圖表也是這樣的操作,想清楚展現(xiàn)什么樣的數(shù)據(jù),怎樣展現(xiàn),數(shù)據(jù)要作何處理。就得心應(yīng)手了。其他圖表就不一一贅述了。
最后,大概花了15分鐘,一份完整的智聯(lián)招聘網(wǎng)站-BI工程師崗位數(shù)據(jù)分析的可視化報(bào)告就制作完成啦~
審美有限,只能做成這樣,其實(shí)這個(gè)FineBI還能做出這樣的效果。
1.目前BI工程師崗位在智聯(lián)招聘網(wǎng)站的平均薪資為13.46K(痛哭。。。拉低平均薪水的存在),主要薪水區(qū)間大概在12-15K(占比27.07%),相關(guān)工作需求總數(shù)為634個(gè)(僅僅為某一天的招聘需求數(shù)據(jù))。
2.從城市崗位需求數(shù)量分布來看,BI工程師需求主要集中在北京、上海、深圳、廣州區(qū)域;各城市BI工程師平均薪水方面,去除崗位需求量較少的城市來看,國(guó)內(nèi)排在前面的分別為深圳(14.72K)、上海(14.59K)、北京(14.51)、杭州(12.07K)、成都(11.13K)、廣州(10.94K)。
3.從工作年限的平均薪水和崗位需求數(shù)量來看,工作5-10年的資深BI工程師的平均薪水可以達(dá)到20K以上(朝資深BI工程師方向奮斗!!!1年以下年限的計(jì)算出來的平均薪水雖然為19K,但是由于樣本量只有3個(gè),所以參考意義不大),其中大部分的工作需求年限為3-5年,平均薪水為14.24K。
4.從學(xué)歷方面來看,最低學(xué)歷需求主要以本科/大專為主,本科和大專學(xué)歷要求的平均薪資分別為12.68K和11.97K(感覺差距并不大,過硬的技術(shù)實(shí)力可能才是企業(yè)最為看重的吧),博士和碩士學(xué)歷需求很少。
5.看了一些高薪的招聘企業(yè),最高的可以給到30K~40K的薪酬水平,其中主要是互聯(lián)網(wǎng)、IT類公司為主。
醍醐灌頂,頓時(shí)有了奮斗的動(dòng)力~知識(shí)就是財(cái)富,繼續(xù)好好學(xué)習(xí)去吧,少年!!!
最后,附上本次爬取到的相關(guān)崗位明細(xì)的CSV數(shù)據(jù)(私心回復(fù)“csv”獲取),如果大家也有分析自己崗位未來前景的想法,但是可能不熟悉數(shù)據(jù)可視化工具的,可以拿這份數(shù)據(jù)用FineBI練練手。
常有人不太會(huì),使用excel來進(jìn)行一些數(shù)據(jù)分析,通過下文的例子,簡(jiǎn)要說明其過程。
書寫此文的目的是宣傳excel的基礎(chǔ)應(yīng)用,提高大家的工作效率。
此文為excel使用的基礎(chǔ)文章,高手請(qǐng)略過。
更深層次的excel使用技巧可以在工作中碰到時(shí),可以進(jìn)一步學(xué)習(xí)。
例子說明:
獲得原始的基礎(chǔ)數(shù)據(jù)
觀察數(shù)據(jù)的特點(diǎn),然后進(jìn)行數(shù)據(jù)格式化
導(dǎo)入excel軟件,排序,分析
改名,并存檔
例子的說明以及背景說明。
今天在網(wǎng)上,看到一個(gè)“2015年中國(guó)經(jīng)濟(jì)城市百?gòu)?qiáng)”的文章,想初步對(duì)其進(jìn)行數(shù)據(jù)分析,以備后用。
文章出處:http://blog.sina.com.cn/s/blog_53f8060b0102wsrh.html
處理的思路:
從該鏈接獲得原始的基礎(chǔ)數(shù)據(jù),目的:看看人均排名,網(wǎng)上沒有,自己整一個(gè)。——將數(shù)據(jù)復(fù)制到文本文件中,重命名為100.txt(因?yàn)槿糁苯訌?fù)制到excel中,會(huì)放到每一行的第一格,還要整理數(shù)據(jù),所以先復(fù)制到文本文件中)
觀察數(shù)據(jù)的特點(diǎn),然后進(jìn)行數(shù)據(jù)格式化——把一些符號(hào)(如:(,),億元、等替換成,適當(dāng)分割數(shù)據(jù),形成列數(shù)據(jù))
導(dǎo)入excel軟件,排序,分析——導(dǎo)入100.txt到excel軟件,進(jìn)一步整理,補(bǔ)全標(biāo)題行,補(bǔ)齊數(shù)據(jù),并根據(jù)需要排序
改名,并存檔——把100.txt另存為excel格式的文件,并修改文件標(biāo)簽名。
詳細(xì)的操作,見視頻。
最終的,按照人均數(shù)的部分排名截圖(前20名):
說明:
視頻是操作流程,由作者本人錄制,時(shí)長(zhǎng)21:30居然。
在查找數(shù)據(jù)時(shí),用時(shí)稍長(zhǎng),但同時(shí)也告訴了你去哪里找數(shù)據(jù),如何查數(shù)據(jù),另外,還有一些有價(jià)值的話,喜歡的可以看看。
<script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>
建議在wifi下觀看視頻(土豪可以隨意),以后會(huì)盡量壓縮視頻的時(shí)間長(zhǎng)度,或使用截圖來說明。
既然錄了,傳一次視頻,看看反響如何,(未錄制文件更名的操作)
若喜歡的人多,繼續(xù)嘗試視頻,若一般,則會(huì)修正。
感謝您的閱讀,聰明人可以不用看視頻,了解思路即可。
寫Excel文件是在做數(shù)據(jù)分析相關(guān)工作時(shí)非常常見的一個(gè)操作,也經(jīng)常有同學(xué)問起相關(guān)的問題。
今天就跟大家詳細(xì)分享一下,如何通過Pandas來讀取Excel文件里的數(shù)據(jù),以及如何將DataFrame保存到Excel文件中。
官網(wǎng)參數(shù)詳解:
https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html
read_excel函數(shù)能夠讀取的格式包含:xls, xlsx, xlsm, xlsb, odf, ods 和 odt 文件擴(kuò)展名。支持讀取單一sheet或幾個(gè)sheet。
以下是官方文檔中提供的全部參數(shù)信息:
pandas.read_excel(
io,
sheet_name=0,
header=0,
names=None,
index_col=None,
usecols=None,
squeeze=None,
dtype=None,
engine=None,
converters=None,
true_values=None,
false_values=None,
skiprows=None,
nrows=None,
na_values=None,
keep_default_na=True,
na_filter=True,
verbose=False,
parse_dates=False,
date_parser=None,
thousands=None,
decimal='.',
comment=None,
skipfooter=0,
convert_float=None,
mangle_dupe_cols=True,
storage_options=None
)
常用參數(shù)的含義:
現(xiàn)在模擬兩個(gè)數(shù)據(jù):Pandas_Excel.xls 和 Pandas_Excel.xlsx
Pandas_Excel.xls 文件中包含兩個(gè)sheet,第二個(gè)數(shù)據(jù)只比第一個(gè)多個(gè)index的信息
1、sheet1的內(nèi)容
image-20220423115151077
2、sheet2的內(nèi)容
3、Pandas_Excel.xlsx的內(nèi)容,模擬的完整信息:
import pandas as pd
此時(shí)文件剛好在當(dāng)前目錄下,讀取的時(shí)候指定文件名即可,可以看到讀取的是第一個(gè)sheet
df=pd.read_excel("Pandas-Excel.xls")
df
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
填寫完整的文件路徑作為io的取值。也可以使用相對(duì)路徑
pd.read_excel(r"/Users/peter/Desktop/pandas/Pandas-Excel.xls")
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
# pd.read_excel("Pandas-Excel.xls", sheet_name=0) # 效果同上
# 直接指定sheet的名字
pd.read_excel("Pandas-Excel.xls", sheet_name="Sheet1") # 效果同上
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
換成讀取第二個(gè)sheet:名稱是Sheet2
pd.read_excel("Pandas-Excel.xls", sheet_name="Sheet2")
index | name | age | sex | address | date | |
0 | 1 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 2 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 3 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 4 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 5 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 6 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
結(jié)果中多了一列index的取值
# 和默認(rèn)情況相同
pd.read_excel("Pandas-Excel.xls", header=[0])
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
pd.read_excel("Pandas-Excel.xls", header=[1]) # 單個(gè)元素
第一行的數(shù)據(jù)當(dāng)做列屬性:
張三 | 23 | 男 | 深圳 | 2022-04-01 00:00:00 | |
0 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
1 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
2 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
3 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
4 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
傳入多個(gè)元素會(huì)形成多層索引:
pd.read_excel("Pandas-Excel.xls", header=[0,1]) # 多個(gè)元素
name | age | sex | address | date | |
張三 | 23 | 男 | 深圳 | 2022-04-01 00:00:00 | |
0 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
1 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
2 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
3 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
4 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
# 指定列名稱
pd.read_excel("Pandas-Excel.xls", names=["a","b","c","d","e"])
a | b | c | d | e | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
# 指定單個(gè)元素作為索引
pd.read_excel("Pandas-Excel.xls", index_col=[0])
age | sex | address | date | |
name | ||||
張三 | 23 | 男 | 深圳 | 2022-04-01 |
李四 | 16 | 男 | 廣州 | 2022-04-02 |
小明 | 26 | 未知 | 深圳 | 2022-04-05 |
張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
小蘇 | 20 | 女 | NaN | 2022-06-07 |
小王 | 0 | 男 | 南京 | 2022-05-09 |
# 多個(gè)元素
pd.read_excel("Pandas-Excel.xls", index_col=[0,1])
sex | address | date | ||
name | age | |||
張三 | 23 | 男 | 深圳 | 2022-04-01 |
李四 | 16 | 男 | 廣州 | 2022-04-02 |
小明 | 26 | 未知 | 深圳 | 2022-04-05 |
張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
小蘇 | 20 | 女 | NaN | 2022-06-07 |
小王 | 0 | 男 | 南京 | 2022-05-09 |
pd.read_excel("Pandas-Excel.xls", usecols=[0]) # 單個(gè)字段
name | |
0 | 張三 |
1 | 李四 |
2 | 小明 |
3 | 張飛 |
4 | 小蘇 |
5 | 小王 |
pd.read_excel("Pandas-Excel.xls", usecols=[0,2,4]) # 多個(gè)字段
name | sex | date | |
0 | 張三 | 男 | 2022-04-01 |
1 | 李四 | 男 | 2022-04-02 |
2 | 小明 | 未知 | 2022-04-05 |
3 | 張飛 | 女 | 2021-09-08 |
4 | 小蘇 | 女 | 2022-06-07 |
5 | 小王 | 男 | 2022-05-09 |
# 直接指定名稱
pd.read_excel("Pandas-Excel.xls", usecols=["age","sex"])
age | sex | |
0 | 23 | 男 |
1 | 16 | 男 |
2 | 26 | 未知 |
3 | 28 | 女 |
4 | 20 | 女 |
5 | 0 | 男 |
# 傳入匿名函數(shù),字段中包含a,結(jié)果sex沒有了
pd.read_excel("Pandas-Excel.xls", usecols=lambda x: "a" in x)
name | age | address | date | |
0 | 張三 | 23 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | NaN | 2022-06-07 |
5 | 小王 | 0 | 南京 | 2022-05-09 |
df.dtypes
name object
age int64
sex object
address object
date datetime64[ns]
dtype: object
從上面的結(jié)果中看到age字段,在默認(rèn)情況下讀取的是int64類型:
# 指定數(shù)據(jù)類型
df1=pd.read_excel("Pandas-Excel.xls", dtype={"age":"float64"})
# 查看字段信息
df1.dtypes
name object
age float64 # 修改
sex object
address object
date datetime64[ns]
dtype: object
# xls 結(jié)尾
pd.read_excel("Pandas-Excel.xls", engine="xlrd")
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
# xlsx 結(jié)尾
pd.read_excel("Pandas-Excel.xlsx", engine="openpyxl")
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 男 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | 杭州 | 2022-06-07 |
5 | 小王 | 25 | 男 | 南京 | 2022-05-09 |
pd.read_excel("Pandas-Excel.xlsx") # 默認(rèn)操作
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 男 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | 杭州 | 2022-06-07 |
5 | 小王 | 25 | 男 | 南京 | 2022-05-09 |
pd.read_excel("Pandas-Excel.xlsx",
usecols=[1,3], # 1-age 3-address 數(shù)值為原索引號(hào)
converters={0:lambda x: x+5, # 0代表上面[1,3]中的索引號(hào)
1:lambda x: x + "市"
})
age | address | |
0 | 28 | 深圳市 |
1 | 21 | 廣州市 |
2 | 31 | 深圳市 |
3 | 33 | 蘇州市 |
4 | 25 | 杭州市 |
5 | 30 | 南京市 |
pd.read_excel("Pandas-Excel.xls") # 默認(rèn)情況
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
把張三和李四所在的行直接跳過:
pd.read_excel("Pandas-Excel.xls", skiprows=2)
李四 | 16 | 男 | 廣州 | 2022-04-02 00:00:00 | |
0 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
1 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
2 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
3 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
# 跳過偶數(shù)行
pd.read_excel("Pandas-Excel.xls", skiprows=lambda x: x%2==0)
張三 | 23 | 男 | 深圳 | 2022-04-01 00:00:00 | |
0 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
1 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
# 指定讀取的行數(shù)
pd.read_excel("Pandas-Excel.xls", nrows=2)
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
pd.read_excel("Pandas-Excel.xls") # 默認(rèn)
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
pd.read_excel("Pandas-Excel.xls",
na_values={"sex":"未知"})
sex字段中的未知顯示成了NaN:
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | NaN | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
pd.read_excel("Pandas-Excel.xls") # 默認(rèn)keep_default_na=True
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | NaN | 2022-06-07 |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
pd.read_excel("Pandas-Excel.xls", keep_default_na=False)
name | age | sex | address | date | |
0 | 張三 | 23 | 男 | 深圳 | 2022-04-01 |
1 | 李四 | 16 | 男 | 廣州 | 2022-04-02 |
2 | 小明 | 26 | 未知 | 深圳 | 2022-04-05 |
3 | 張飛 | 28 | 女 | 蘇州 | 2021-09-08 |
4 | 小蘇 | 20 | 女 | 2022-06-07 | |
5 | 小王 | 0 | 男 | 南京 | 2022-05-09 |
簡(jiǎn)單模擬一份數(shù)據(jù):
df2=pd.DataFrame({"num1":[1,2,3],
"num2":[4,5,6],
"num3":[7,8,9]})
df2
num1 | num2 | num3 | |
0 | 1 | 4 | 7 |
1 | 2 | 5 | 8 |
2 | 3 | 6 | 9 |
df2.to_excel("newdata_1.xlsx")
效果如下:
df2.to_excel("newdata_2.xlsx",index=False)
不會(huì)帶上索引號(hào)
以上就是對(duì) Pandas 讀寫 Excel 相關(guān)方法及參數(shù)的詳細(xì)解讀。希望對(duì)你有所幫助。建議收藏一下以備不時(shí)之需。
作者:Peter
來源:尤而小屋
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。