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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

丞相弩的pandas基础笔记

發布時間:2024/3/24 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 丞相弩的pandas基础笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pandas筆記

pandas數據分析

pandas是Python的一個數據處理的模塊,是一個表格處理器。用Python做數據分析,pandas是必不可少的。
首先必須要導入這個pandas庫:

import pandas as pd

之后我們就可以開始使用pandas了。首先我們要一個表格,表格的獲取有三種辦法,第一是用字典方法:

第二是用爬蟲來爬

import requests import lxml import pandas as pd from lxml import etree res = requests.get('https://aoestats.io/stats/RM_1v1/1650+') res_elements = etree.HTML(res.text) table = res_elements.xpath('//*[@id="gatsby-focus-wrapper"]/div/div/main/table') table = etree.tostring(table[0], encoding='utf-8').decode()df_帝二排行榜 = pd.read_html(table, encoding='utf-8', header=0)[0] results = list(df_帝二排行榜.T.to_dict().values()) # 轉換成列表嵌套字典的格式 df_帝二排行榜 CivilizationWin RateUnnamed: 2Play RateUnnamed: 4Game Length01234567…28293031323334
Aztecs54.40%+9%6.12%-14%36:12
Berbers42.99%-3%1.70%+31%54:29
Britons50.15%+10%5.24%+32%32:05
Bulgarians44.07%+15%0.93%+34%26:21
Burmese46.67%+9%1.19%-15%31:22
Byzantines51.72%-1%1.38%+62%33:07
Celts50.95%-8%6.65%+19%33:27
Chinese52.76%+9%4.02%-29:50
Slavs54.12%+25%1.35%-4%31:11
Spanish49.44%-10%2.85%-32%31:49
Tatars47.50%+14%1.27%-59%35:46
Teutons58.76%+7%2.80%+256%42:11
Turks52.38%+2%1.00%+23%42:55
Vietnamese57.53%+9%1.16%+7%31:11
Vikings44.77%-6%4.39%+65%39:51

第三則是直接拿一個Excel表格來讀取。

df = pd.read_csv ("20春_pandas_week02_hurun_unicorn.tsv", encoding = "utf8", sep="\t") df 排名企業名稱Company Name估值(億人民幣)國家城市行業掌門人/創始人成立年份部分投資機構01234...489490491492493
1螞蟻金服Ant Financial10000中國杭州金融科技井賢棟2014春華資本、中投海外、紅杉資本
2字節跳動Bytedance5000中國北京媒體和娛樂張一鳴2012紅杉資本、海納亞洲、紀源資本、啟明創投
3滴滴出行Didi Chuxing3600中國北京共享經濟程維2012騰訊、阿里巴巴、紅杉資本、經緯中國、紀源資本
4InforInfor3500美國紐約云計算Jim Schaper2002Golden Gate Capital,?Koch Equity Development
5JUUL LabsJUUL Labs3400美國舊金山消費品Adam Bowen, James Monsees, Kevin Burns, Tim Da...2015M13, Timothy Davis, Evolution VC Partners, Tig...
..............................
264Zeta GlobalZeta Global70美國紐約人工智能David A. Steinberg,?John Sculley2007GPI Capital, GSO Capital Partners
264掌門1對1Zhangmen70中國上海教育科技張翼2014順為資本、達晨創投、華平投資
264轉轉Zhuanzhuan70中國北京電子商務姚勁波2015騰訊
264Zipline InternationalZipline International70美國半月灣物流Keenan Wyrobek,?Keller Rinaudo,?Will Hetzler2014Sequoia Capital, Visionnaire Ventures, Katalys...
264ZipRecruiterZipRecruiter70美國洛杉磯電子商務Ian Siegel,?Joe Edmonds,?Ward Poulos,?Willis Redd2010IVP (Institutional Venture Partners)

拿到了數據之后就可以分析了。

set_index和reset_index

set_index可以把表頭的某一元素變成索引

df.set_index('企業名稱') 排名Company Name估值(億人民幣)國家城市行業掌門人/創始人成立年份部分投資機構企業名稱螞蟻金服字節跳動滴滴出行InforJUUL Labs...Zeta Global掌門1對1轉轉Zipline InternationalZipRecruiter
1Ant Financial10000中國杭州金融科技井賢棟2014春華資本、中投海外、紅杉資本
2Bytedance5000中國北京媒體和娛樂張一鳴2012紅杉資本、海納亞洲、紀源資本、啟明創投
3Didi Chuxing3600中國北京共享經濟程維2012騰訊、阿里巴巴、紅杉資本、經緯中國、紀源資本
4Infor3500美國紐約云計算Jim Schaper2002Golden Gate Capital,?Koch Equity Development
5JUUL Labs3400美國舊金山消費品Adam Bowen, James Monsees, Kevin Burns, Tim Da...2015M13, Timothy Davis, Evolution VC Partners, Tig...
...........................
264Zeta Global70美國紐約人工智能David A. Steinberg,?John Sculley2007GPI Capital, GSO Capital Partners
264Zhangmen70中國上海教育科技張翼2014順為資本、達晨創投、華平投資
264Zhuanzhuan70中國北京電子商務姚勁波2015騰訊
264Zipline International70美國半月灣物流Keenan Wyrobek,?Keller Rinaudo,?Will Hetzler2014Sequoia Capital, Visionnaire Ventures, Katalys...
264ZipRecruiter70美國洛杉磯電子商務Ian Siegel,?Joe Edmonds,?Ward Poulos,?Willis Redd2010IVP (Institutional Venture Partners)

這樣,企業名稱就變成了了索引。
用reset_index()可以把它變回來。

df.reset_index()
  • set_index雖然方便,但只能改變一個索引。
  • reset_index可以把groupby處理過的表格變回原樣。

agg()函數

首先是agg()分類函數,這個函數可以為我們統計表格中的某些項目,統計它們的count數量、max最大值、mean中位數、min最小值和sum總量。

df.agg ({ "企業名稱" : "count", \"估值(億人民幣)":["sum","mean"], \"成立年份":["max","min"]}) 企業名稱估值(億人民幣)成立年份countmaxmeanminsum
494.0NaNNaN
NaNNaN2019.0
NaN238.805668NaN
NaNNaN2000.0
NaN117970.000000NaN
  • 在初始表格df中,我們可以看出企業名稱確實是有494個。
  • 從代碼可以看出來——我們只讓它統計企業名稱的個數count,估值的均值mean和總數sum,以及成立年份的最大值max和最小值min。

groupby()函數

groupby顧名思義就是分組用的函數,但是并不能單獨使用,同樣以我們的初始表格為例,和agg()一起使用。我們在里面的by屬性先后添加國家、行業,它會把國家放在左邊,之后把該國家所有的行業集中在一起,達到一個分組的效果。

df.groupby ( by = ['國家','行業'] ).agg ({ "企業名稱" : "count", \"估值(億人民幣)":["sum","mean"], \"成立年份":["max","min"], }) 企業名稱估值(億人民幣)成立年份countsummeanmaxmin國家行業中國云計算人工智能健康科技共享經濟區塊鏈......韓國游戲物流電子商務金融科技馬耳他區塊鏈
546092.00000020152011
152090139.33333320162009
132060158.46153820192000
84740592.50000020162011
41250312.50000020172013
...............
1350350.00000020072007
1200200.00000020112011
3740246.66666720102005
17070.00000020112011
1150150.00000020172017

同樣我們把行業和國家調換位置,它會把行業放到左邊,然后把有這個行業的國家全部集中起來。達到一個分組的效果。這就是groupby分組函數的使用方法。

df.groupby ( by = ['行業','國家'] ).agg ({ "企業名稱" : "count", \"估值(億人民幣)":["sum","mean"], \"成立年份":["max","min"], }) 企業名稱估值(億人民幣)成立年份countsummeanmaxmin行業國家3D印刷美國云計算中國以色列澳大利亞愛爾蘭......金融科技德國瑞典美國英國韓國
3370123.33333320152011
546092.00000020152011
4440110.00000020132010
1200200.00000020122012
1150150.00000020002000
...............
1200200.00000020132013
1300300.00000020052005
215020239.04761920172000
61250208.33333320152011
17070.00000020112011

sort_values()函數

該函數可以對內容進行排序。
例如我們要根據估值總數sum的大小來對表格進行一個從大到小的排序,就可以用到這個sort_values()函數,ascending的值可以設置升降序。

# .sort_values ( by = [("估值(億人民幣)","sum")], ascending = False)df.groupby ( by = ['國家','行業'] ).agg ({ "企業名稱" : "count", \"估值(億人民幣)":["sum","mean"], \"成立年份":["max","min"], })\.sort_values ( by = [("估值(億人民幣)","sum")], ascending = False) 企業名稱估值(億人民幣)成立年份countsummeanmaxmin國家行業中國金融科技媒體和娛樂美國云計算共享經濟金融科技......日本區塊鏈法國人工智能媒體和娛樂愛沙尼亞共享經濟法國健康科技
2217960816.36363620182002
178230484.11764720152003
326880215.00000020152000
65670945.00000020172008
215020239.04761920172000
...............
17070.00000020142014
17070.00000020162016
17070.00000020062006
17070.00000020132013
17070.00000020132013

這樣的話,sum最多的那一個就被排到最上方了。

rename()函數

rename很明顯就是一個改名函數,如果表頭是外文很難理解,或者有特殊標點不便于分析,那么我們可以用rename對其進行一個重命名。

df.groupby ( by = ['國家','行業'] ) \.agg ({ "企業名稱" : "count", \"估值(億人民幣)":["sum","mean"], \"成立年份":["max","min"], }) \.sort_values ( by = [("估值(億人民幣)","sum")], ascending = False) \.rename ( columns = {"sum":"總和", "mean":"均值", "count":"數量", "max":"最新", "min":"最早"} ) 企業名稱估值(億人民幣)成立年份數量總和均值最新最早國家行業中國金融科技媒體和娛樂美國云計算共享經濟金融科技......日本區塊鏈法國人工智能媒體和娛樂愛沙尼亞共享經濟法國健康科技
2217960816.36363620182002
178230484.11764720152003
326880215.00000020152000
65670945.00000020172008
215020239.04761920172000
...............
17070.00000020142014
17070.00000020162016
17070.00000020062006
17070.00000020132013
17070.00000020132013

之后我們將目光投向“部分投資機構”


從這張截圖中我們可以看出,每一個機構都是用頓號“、”進行分隔,因此我們可以利用這個“、”來進行分割。

df["部分投資機構"].str.split('、',expand=True)split表示以"、"為分隔符對字符串進行分割
  • split表示以"、"為分隔符對字符串進行分割
  • expand=True,這個參數直接將分列后的結果轉換成DataFrame。
01234501234...489490491492493
春華資本中投海外紅杉資本NoneNoneNone
紅杉資本海納亞洲紀源資本啟明創投NoneNone
騰訊阿里巴巴紅杉資本經緯中國紀源資本None
Golden Gate Capital,?Koch Equity DevelopmentNoneNoneNoneNoneNone
M13, Timothy Davis, Evolution VC Partners, Tig...NoneNoneNoneNoneNone
..................
GPI Capital, GSO Capital PartnersNoneNoneNoneNoneNone
順為資本達晨創投華平投資NoneNoneNone
騰訊NoneNoneNoneNoneNone
Sequoia Capital, Visionnaire Ventures, Katalys...NoneNoneNoneNoneNone
IVP (Institutional Venture Partners)NoneNoneNoneNoneNone

我們可以看出,最后一列“部分投資機構”已經被分割并制成表格了。

此外,可以用一些方法來判斷表格中的元素是否包含某些字符。

  • isnumeric 判斷是否為數字(沒什么卵用,先留著看看)
df["企業名稱"].str.isnumeric() >>> 0 False 1 False 2 False 3 False 4 False... 489 False 490 False 491 False 492 False 493 False Name: 企業名稱, Length: 494, dtype: bool

數據透視

drop()刪除方法

先做一些準備,將企業名稱掌門人\創始人提取出來做成一個新表格。

df_獨角獸_創始人_準備 =df[["企業名稱","掌門人/創始人"]] 企業名稱掌門人/創始人序號01234...489490491492493
螞蟻金服井賢棟
字節跳動張一鳴
滴滴出行程維
InforJim Schaper
JUUL LabsAdam Bowen, James Monsees, Kevin Burns, Tim Da...
......
Zeta GlobalDavid A. Steinberg,?John Sculley
掌門1對1張翼
轉轉姚勁波
Zipline InternationalKeenan Wyrobek,?Keller Rinaudo,?Will Hetzler
ZipRecruiterIan Siegel,?Joe Edmonds,?Ward Poulos,?Willis Redd
drop()刪除某列,作為準備合并的表格 df_待合并 =df_獨角獸_創始人_準備.drop('掌門人/創始人', axis=1) 企業名稱序號01234...489490491492493
螞蟻金服
字節跳動
滴滴出行
Infor
JUUL Labs
...
Zeta Global
掌門1對1
轉轉
Zipline International
ZipRecruiter

使用drop()方法刪除**‘掌門人/創始人’**一列。

準備合并的一對列

df_準備合并的列 =df['掌門人/創始人'].str.split(',', expand=True).stack().reset_index(level=1,drop=True).rename('掌門人/創始人') >>> 序號 0 井賢棟 1 張一鳴 2 程維 3 Jim Schaper 4 Adam Bowen... 492 Will Hetzler 493 Ian Siegel 493 Joe Edmonds 493 Ward Poulos 493 Willis Redd Name: 掌門人/創始人, Length: 911, dtype: object

注意: rename一定要寫,相當于給這個表格命名,否則不讓合并。

dict_準備合并的列 = {"序號":df_準備合并的列.index,"掌門人/創始人":df_準備合并的列.values} df_準備合并列=pd.DataFrame(dict_準備合并的列) 序號掌門人/創始人01234...906907908909910
0井賢棟
1張一鳴
2程維
3Jim Schaper
4Adam Bowen
......
492Will Hetzler
493Ian Siegel
493Joe Edmonds
493Ward Poulos
493Willis Redd
也可以寫成這樣 df_獨角獸_創始人_準備 =df[["企業名稱","掌門人/創始人"]] df_獨角獸_創始人_準備.index.name="序號" df_獨角獸_創始人 =pd.merge(df_獨角獸_創始人_準備.drop('掌門人/創始人', axis=1),\df['掌門人/創始人'].str.split(',', expand=True)\.stack().reset_index(level=1,drop=True).rename('掌門人/創始人'),\on="序號")

merge()合并相同序號的元素

df_獨角獸_創始人 = pd.merge(df_待合并,df_準備合并的列,on= "序號") 企業名稱掌門人/創始人序號01234...492493493493493
螞蟻金服井賢棟
字節跳動張一鳴
滴滴出行程維
InforJim Schaper
JUUL LabsAdam Bowen
......
Zipline InternationalWill Hetzler
ZipRecruiterIan Siegel
ZipRecruiterJoe Edmonds
ZipRecruiterWard Poulos
ZipRecruiterWillis Redd
使用這種方法,相當于將數列展開使用,我們可以看最下面4行——企業名稱"ZipRecruiter"的企業有4位創始人,于是我們得到了4個493行,4位“掌門人/創始人”一人占一行。

contains()方法

contains()函數可以查詢全表格是否包含某些字符,比如我們查查有“紅杉資本”的項目。

df["部分投資機構"].str.contains("紅杉資本") >>> 0 True 1 True 2 True 3 False 4 False... 489 False 490 False 491 False 492 False 493 False Name: 部分投資機構, Length: 494, dtype: bool

比較系統地使用如下

df_投資方_百度 = df_投資方_企業名稱[df_投資方_企業名稱["部分投資機構"].str.contains("百度")] 部分投資機構企業名稱序號13239260438477
紅杉資本、晨興資本、百度、騰訊快手
百度、紅杉資本、真格基金蜜芽
百度、聞名投資新潮傳媒
百度、蔚來資本首汽約車
IDG、賽富基金、百度我買網

數據框排序(sorted_values)

首先我們要弄一個展開的表格,把所有的數據全部展開(由于實在太長了,所以我只看前8行)。

  • Series.sort_index (By index)
    按系列索引排序。

  • DataFrame.sort_values (By values)
    通過沿任一軸的值對DataFrame進行排序。

  • DataFrame.sort_index (By index)
    按索引對DataFrame進行排序。

國_年_估值_展開 = df.groupby(by= ["國家","成立年份"]) \.agg({"估值(億人民幣)":"sum"}) \.reset_index() \.set_index(["國家"]) \.pivot(columns="成立年份", values="估值(億人民幣)").head(8) 成立年份20002001200220032004200520062007200820092010201120122013201420152016201720182019國家中國以色列盧森堡印度印度尼西亞哥倫比亞巴西德國
170.0170.0200.0200.0100.0300.02380.01280.0710.0950.01590.06570.011330.05340.016150.03960.01300.0810.01090.0100.0
NaNNaN150.0NaNNaNNaNNaNNaNNaNNaN210.0150.0150.070.0NaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN70.0NaNNaNNaNNaNNaN
150.0NaNNaNNaN150.0NaNNaN70.0840.0NaN1300.0440.0140.0350.0270.0NaN70.070.0NaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaN500.0700.070.0300.0NaNNaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN70.0NaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN70.070.0370.0NaNNaNNaNNaNNaNNaN
150.0NaNNaNNaNNaNNaNNaNNaNNaN70.0NaN150.0370.0200.070.0NaNNaNNaNNaNNaN

之后我們就可以來排序了,但還是只看前8行。

國_年_估值_展開.sort_index(by=2002,axis=0, ascending=False).head(8) 成立年份20002001200220032004200520062007200820092010201120122013201420152016201720182019國家美國中國以色列盧森堡印度印度尼西亞哥倫比亞巴西
210.0210.06270.0420.01550.0840.0810.02650.04570.02090.06150.02620.04670.03840.02220.05980.01690.0870.0NaN70.0
170.0170.0200.0200.0100.0300.02380.01280.0710.0950.01590.06570.011330.05340.016150.03960.01300.0810.01090.0100.0
NaNNaN150.0NaNNaNNaNNaNNaNNaNNaN210.0150.0150.070.0NaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN70.0NaNNaNNaNNaNNaN
150.0NaNNaNNaN150.0NaNNaN70.0840.0NaN1300.0440.0140.0350.0270.0NaN70.070.0NaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaN500.0700.070.0300.0NaNNaNNaNNaNNaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN70.0NaNNaNNaN
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN70.070.0370.0NaNNaNNaNNaNNaNNaN

sorted_values根據屬性by對數據進行排序,by=2002時,我們根據2002年的數據對整個表格進行從大到小的排序。

pivot()函數

pivot()指定列index、行columns、值values,是非常方便的函數。我還是只放前8行。

國_年_估值_pivot = 分進合擊初階.reset_index().pivot(index = '成立年份',columns='國家' ,values='估值(億人民幣)' ) 國家中國以色列盧森堡印度印度尼西亞哥倫比亞巴西德國新加坡日本...瑞典瑞士美國芬蘭英國菲律賓西班牙阿根廷韓國馬耳他成立年份20002001200220032004200520062007
170.0NaNNaN150.0NaNNaNNaN150.0NaNNaN...NaNNaN210.0NaNNaNNaNNaNNaNNaNNaN
170.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN210.0NaNNaNNaNNaNNaNNaNNaN
200.0150.0NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN6270.0NaNNaNNaNNaNNaNNaNNaN
200.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN420.0NaNNaNNaNNaNNaNNaNNaN
100.0NaNNaN150.0NaNNaNNaNNaNNaNNaN...NaNNaN1550.0NaN350.0NaNNaNNaNNaNNaN
300.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...300.0NaN840.0NaN150.0NaNNaNNaN70.0NaN
2380.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN810.0NaNNaNNaNNaNNaNNaNNaN
1280.0NaNNaN70.0NaNNaNNaNNaNNaNNaN...NaNNaN2650.0NaNNaNNaNNaNNaN350.0NaN

總結

以上是生活随笔為你收集整理的丞相弩的pandas基础笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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