作為一個(gè)學(xué)習(xí)了很長(zhǎng)時(shí)間的Python的我來說,Python 他能干什么,其實(shí)在鋪天蓋地的廣告,已經(jīng)告訴你它能干什么了。但是我告訴你的是,你通過廣告接觸的python 速成小課,你學(xué)完它之后,你并不能處理任何工作上的問題.
Python的精髓在于:它有豐富的模塊庫(kù),我們的課程是重點(diǎn)拿爬蟲來講模塊庫(kù)的調(diào)用。就像一個(gè)app商店,全球開發(fā)者共同維護(hù),任何人都可以調(diào)用,學(xué)會(huì)模塊調(diào)用,才真正打開了python的大門。
編程在于積累,在于積累前輩們的代碼,以及去思考如何創(chuàng)新自己的代碼。?
其實(shí)大多數(shù)自動(dòng)化辦公的人,就是處理Excel 等數(shù)據(jù)。
處理Excel 用到的模塊這里我給大家總結(jié),希望大家不要走彎路
1、openpyxl??
其實(shí)大多數(shù)這兩個(gè)情況下就可以了。首先我們介紹的是openpyxl 它能對(duì)Excel 做什么。

2、Pandas??
pandas是一種快速,強(qiáng)大,靈活且易于使用的開源數(shù)據(jù)分析和處理工具,它
建立在Python編程語(yǔ)言之上。
案例1:租房數(shù)據(jù)案例分析
1、讀取Excel 中的租房數(shù)據(jù)
import pandas as pd
excel_path = 'E:\\Python_Office_Auto\\Day7\\house.xlsx'
houses = pd.read_excel(excel_path)
2、查看Excel中的數(shù)據(jù)有多少行,多少列
print(houses.shap)
# (9869行, 18列)
3、通過head打印出前5行數(shù)據(jù)
print(houses.head())
'''? ? ? ? 樓盤名稱??... ?????????????標(biāo)簽0 ???北京花園亮馬橋朝陽(yáng)公園南北四居燕莎友誼商城手慢無(wú)??... ???????采光好/南北通透1 ???????傳媒第二外國(guó)語(yǔ)學(xué)院南門旁三間房南里7號(hào)院兩居室??... ????????????NaN2 ?????????????榮尊堡多套兩居出租,車位充足,看房隨時(shí)??... ????????????NaN3 ?六號(hào)線黃渠柏林愛樂精裝一居家電齊全隨時(shí)看房包物業(yè)取暖??... ?首次出租/全裝全配/交通便利4 ??????朝庭104平兩居室精心裝修看房效果很好隨時(shí)起租??... ????????????NaN
'''
#說明:當(dāng)一個(gè)Excel 數(shù)據(jù),非常大的時(shí)候,你手動(dòng)打開一個(gè)Excel 文件去了解它,那是真的太難受了。打開巨大Excel表格都曉得。 如果你的列特別多,使用pandas查詢數(shù)據(jù)的時(shí)候,會(huì)默認(rèn)隱藏中間的列。
4、columns 來查詢列名。
print(houses.columns)
'''Index(['樓盤名稱', '租賃方式', '戶型', '面積', '朝向', '房租', '更新時(shí)間', '采集時(shí)間', '城市', '區(qū)域',???????'街道或片區(qū)', '地段', '地址', '公交站', '主圖鏈接', '樓盤詳情鏈接', '頁(yè)面網(wǎng)址', '標(biāo)簽'],??????dtype='object')'''
說明:我們可以很清晰看到Excel中每個(gè)列名的名字。然后我們就可以通過列名輕松加愉快的去訪問他們了。
也可以通過負(fù)索引,查詢出最后一列的名字
houses.columns[-1]# ?'標(biāo)簽'
5、篩選數(shù)據(jù),查看朝向中,朝北,朝南的數(shù)據(jù),并且只顯示列(樓盤名稱、面積)即可
houses.loc[houses.朝向.isin(['朝北', '朝南',]), ['樓盤名稱','面積']].head(5)
''' ?????????????????????????????樓盤名稱面積0 ???北京花園亮馬橋朝陽(yáng)公園南北四居燕莎友誼商城手慢無(wú)??268㎡1 ???????傳媒第二外國(guó)語(yǔ)學(xué)院南門旁三間房南里7號(hào)院兩居室???65㎡3 ?六號(hào)線黃渠柏林愛樂精裝一居家電齊全隨時(shí)看房包物業(yè)取暖???55㎡5 ??????????????????????周莊嘉園東里次臥出租???18㎡6 ??????????工體西里朝南精裝兩居三里屯朝陽(yáng)門東四十條???78㎡'''
通過篩選,一下子就能得到我們想要的數(shù)據(jù)。是不是非常簡(jiǎn)單,快來嘗試一下把。
數(shù)據(jù)可以添加我們的QQ學(xué)習(xí)交流群367203382,找群主獲取。
6、處理帶有字符串?dāng)?shù)字的錢
houses.房租.head()'
''0 ???35000元/月1 ????4300元/月2 ???15000元/月3 ????5500元/月4 ???13500元/月Name: 房租, dtype: object'''houses.房租= houses.房租.str.split('元',expand=True)[0].astype("int")houses.房租.head()'''0 ???350001 ????43002 ???150003 ????55004 ???13500Name: 房租, dtype: int32'''
說明:我們要統(tǒng)計(jì)金額最大的數(shù)字,帶有元/月的字符串是無(wú)法進(jìn)行統(tǒng)計(jì)的。
所以我們要把元/月給他過濾掉。 使用split函數(shù)即可。
如果后續(xù)有更加過濾話的需求,字符串的函數(shù)已經(jīng)無(wú)法滿足你,可以結(jié)合lambda函數(shù)來進(jìn)行過濾。可以達(dá)到同樣的效果。
houses.房租= houses.房租.apply(func = lambda x:int(x.split('元')[0]))
7、獲取房租最貴的前5行數(shù)據(jù)
df_max_5 = houses.sort_values('房租').tail(5)
樓盤名稱面積房租
2416后海 什剎海 恭王 府柳蔭街大型精裝四合院 帶車庫(kù) 接待會(huì)所 ?1000㎡ ??400000
5190后海什剎海精裝四合院 帶車庫(kù) 露臺(tái) 古香古色 ?1000㎡ ??416700
5136后海什剎海精裝四合院 帶車庫(kù) 露臺(tái) 古香古色 ?1000㎡ ??416700
5135西城區(qū)后海什剎海四合院專業(yè)接待商務(wù)會(huì)所四合院出租 ?2500㎡ ??625000
4467金融街 阜成門 西四 豪華型正規(guī)三進(jìn)四合院 ?6400㎡ ?1900000
說明我們使用sort_values函數(shù),讓我們的房租,先排好序。默認(rèn)是升序。就是
第一行最小,1,2,3,4. 。當(dāng)我們的價(jià)格按照小學(xué)生的身高一樣排好之后。身高最高的5位,
我們走到后排。從結(jié)尾開始數(shù)倒數(shù),獲取5個(gè)學(xué)生不就可以了嗎。道理就是這樣簡(jiǎn)單。
這里我們使用tail函數(shù),實(shí)現(xiàn)這樣的功能。、
因?yàn)槲覀冞@是真實(shí)數(shù)據(jù),可以看得出來,有錢人的生活我們是真的不懂。
1百九十萬(wàn) 每個(gè)月的四合院,有的人租下來可能就是單純?yōu)榱怂X。
8、獲取房租最便宜的前5行數(shù)據(jù)
df_min_5 = houses.sort_values('房租').head(5)
df_min_5.loc[:,['樓盤名稱','面積','房租']]
樓盤名稱面積房租
9616北京時(shí)代廣場(chǎng) 全新家電 家電齊全 正規(guī)居室 臥室南向 ?11㎡ ?1000
8660 ?????????????1000大開間,燕郊租房都可以聯(lián)系我 ?42㎡ ?1000
9617北京時(shí)代廣場(chǎng) 一客一鎖 精裝全齊 配套齊全 臥室南向 ?11㎡ ?1000
8701燕郊開發(fā)區(qū),燕順路,星河皓月 ?64㎡ ?1000
9188個(gè)人合租,無(wú)中介費(fèi),中介勿擾,傳銷勿擾,押一付一,次臥600 ?15㎡ ?1000
說明,如果想取出最便宜的房租,那我們直接使用head數(shù)據(jù),提取前5個(gè)數(shù)據(jù),就行了。
從這里看出來,最便宜的房租1千大洋每個(gè)月,最貴的房租1百90萬(wàn)大洋每個(gè)月。
從房子的價(jià)格就能看出來,離北京越遠(yuǎn)房租越便宜,離北京越近,房租還在1千的,房間小的已經(jīng)只能放得下一張床。 數(shù)據(jù)的真相就是讓人頭大。
9、統(tǒng)計(jì)每個(gè)區(qū)域發(fā)布了多少房租租賃信息
houses.區(qū)域.value_counts()?
# 返回區(qū)域關(guān)聯(lián)的數(shù)據(jù)行數(shù),默認(rèn)降序'''西城??????4996朝陽(yáng)??????2040北京周邊?????739密云???????712門頭溝??????680燕郊???????323旅游地產(chǎn)?????191延慶????????97懷柔????????86平谷?????????5Name: 區(qū)域, dtype: int64'''
說明:還有第二種方式,通過分組統(tǒng)計(jì)
houses.groupby('區(qū)域')[['房租']].count()
房租
區(qū)域
北京周邊739
密云712
平谷5
延慶97
懷柔86
旅游地產(chǎn)191
朝陽(yáng)2040
燕郊323
西城4996
門頭溝680
10、從數(shù)據(jù)里,篩選出房租大于28w的數(shù)據(jù)
houses.loc[houses.房租>=280000,['樓盤名稱','面積','房租']].head()
樓盤名稱面積房租
995樣板間設(shè)計(jì) 拎包入住+泳池+范思哲和芬迪家具 ?1500㎡ ?400000
2351后海什剎海四合院出租 ?1000㎡ ?300000
2381后海什剎海四合院出租 ?1000㎡ ?300000
2397后海什剎海四合院出租 ?1000㎡ ?300000
2416后海 什剎海 恭王 府柳蔭街大型精裝四合院 帶車庫(kù) 接待會(huì)所 ?1000㎡ ?400000
說明:通過loc來篩選數(shù)據(jù),也可以使用
houses[houses.房租>=280000].head()
可以通過len函數(shù)直接獲取 大于28w 的房租有多少個(gè)
len(houses[houses.房租>=280000])
# 68
房租大于28w每個(gè)月的房子往外出租的還真不多。
11、統(tǒng)計(jì)比較受歡迎的租金價(jià)格
# 統(tǒng)計(jì)租金出現(xiàn)的次數(shù)
hot_counts = houses.房租.value_counts()
# 統(tǒng)計(jì)某一個(gè)確定價(jià)格的租金出現(xiàn)超過1百50次的
top_counts = ?hot_counts[hot_counts >=150]print(top_counts)
'''1800 ????2578000 ????19212000 ???1847000 ????1821500 ????1766500 ????152Name: 房租, dtype: int64'''# 通過索引獲取1800 是最受歡迎的價(jià)格print(top_counts.index[0]) #輸出:1800
說明value_counts是個(gè)經(jīng)常使用的函數(shù),很方便的統(tǒng)計(jì)某一列中,某個(gè)數(shù)值出現(xiàn)了多少次。
我們可以統(tǒng)計(jì)出每個(gè)月1800的 房租,才是最受歡迎的,因?yàn)槲覀儺吘故亲畹讓拥拇蚬と恕?/p>
還有更多案例均在我們Python學(xué)習(xí)交流群:367203382