当前位置:首页 > 云服务器 > 正文内容

丞相弩的pandas基础笔记,Cho,Ko,Nu的博客,服务器与客户端ip

香港256IP千兆站群服务器BGP专线240元起! 华为云香港物理机精品线路全面上线![特价] 企业级CN2 GIA双程专线高速回国 T3机房 香港美国韩国海外独立物理服务器特价热销中!

pandas笔记

丞相弩的pandas基础笔记,Cho,Ko,Nu的博客,服务器与客户端ip

pandas数据分析

pandas是Python的一个数据处理的模块,是一个表格处理器。用Python做数据分析,pandas是必不可少的。
首先必须要导入这个pandas库:

import pandas as pd

之后我们就可以开始使用pandas了。首先我们要一个表格,表格的获取有三种办法,第一是用字典方法:

第二是用爬虫来爬

import requestsimport lxmlimport pandas as pdfrom lxml import etreeres = 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 Length
0AztECS54.40%+9%6.12%-14%36:12
1Berbers42.99%-3%1.70%+31%54:29
2Britons50.15%+10%5.24%+32%32:05
3Bulgarians44.07%+15%0.93%+34%26:21
4Burmese46.67%+9%1.19%-15%31:22
5Byzantines51.72%-1%1.38%+62%33:07
6Celts50.95%-8%6.65%+19%33:27
7Chinese52.76%+9%4.02%-29:50
28Slavs54.12%+25%1.35%-4%31:11
29Spanish49.44%-10%2.85%-32%31:49
30Tatars47.50%+14%1.27%-59%35:46
31Teutons58.76%+7%2.80%+256%42:11
32Turks52.38%+2%1.00%+23%42:55
33Vietnamese57.53%+9%1.16%+7%31:11
34Vikings44.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估值(亿人民币)国家城市行业掌门人/创始人成立年份部分投资机构
01蚂蚁金服Ant Financial10000中国杭州金融科技井贤栋2014春华资本、中投海外、红杉资本
12字节跳动Bytedance5000中国北京媒体和娱乐张一鸣2012红杉资本、海纳亚洲、纪源资本、启明创投
23滴滴出行Didi Chuxing3600中国北京共享经济程维2012腾讯、阿里巴巴、红杉资本、经纬中国、纪源资本
34InforInfor3500美国纽约云计算Jim Schaper2002Golden Gate Capital, Koch Equity Development
45JUUL LabsJUUL Labs3400美国旧金山消费品Adam Bowen, James Monsees, Kevin Burns, Tim Da...2015M13, Timothy Davis, Evolution VC Partners, Tig...
.................................
489264Zeta GlobalZeta Global70美国纽约人工智能David A. Steinberg, John Sculley2007GPI Capital, GSO Capital Partners
490264掌门1对1Zhangmen70中国上海教育科技张翼2014顺为资本、达晨创投、华平投资
491264转转Zhuanzhuan70中国北京电子商务姚劲波2015腾讯
492264Zipline InternationalZipline International70美国半月湾物流Keenan Wyrobek, Keller Rinaudo, Will Hetzler2014Sequoia Capital, Visionnaire Ventures, Katalys...
493264ZipRecruiterZipRecruiter70美国洛杉矶电子商务Ian Siegel, Joe Edmonds, Ward Poulos, Willis Redd2010IVP (Institutional Venture Partners)

拿到了数据之后就可以分析了。

set_index和reset_index

set_index可以把表头的某一元素变成索引

df.set_index('企业名称')
排名Company Name估值(亿人民币)国家城市行业掌门人/创始人成立年份部分投资机构
企业名称
蚂蚁金服1Ant Financial10000中国杭州金融科技井贤栋2014春华资本、中投海外、红杉资本
字节跳动2Bytedance5000中国北京媒体和娱乐张一鸣2012红杉资本、海纳亚洲、纪源资本、启明创投
滴滴出行3Didi Chuxing3600中国北京共享经济程维2012腾讯、阿里巴巴、红杉资本、经纬中国、纪源资本
Infor4Infor3500美国纽约云计算Jim Schaper2002Golden Gate Capital, Koch Equity Development
JUUL Labs5JUUL Labs3400美国旧金山消费品Adam Bowen, James Monsees, Kevin Burns, Tim Da...2015M13, Timothy Davis, Evolution VC Partners, Tig...
..............................
Zeta Global264Zeta Global70美国纽约人工智能David A. Steinberg, John Sculley2007GPI Capital, GSO Capital Partners
掌门1对1264Zhangmen70中国上海教育科技张翼2014顺为资本、达晨创投、华平投资
转转264Zhuanzhuan70中国北京电子商务姚劲波2015腾讯
Zipline International264Zipline International70美国半月湾物流Keenan Wyrobek, Keller Rinaudo, Will Hetzler2014Sequoia Capital, Visionnaire Ventures, Katalys...
ZipRecruiter264ZipRecruiter70美国洛杉矶电子商务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"]})
企业名称估值(亿人民币)成立年份
count494.0NaNNaN
maxNaNNaN2019.0
meanNaN238.805668NaN
minNaNNaN2000.0
sumNaN117970.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对其进行一个重命名。

0
企业名称估值(亿人民币)成立年份
数量总和均值最新最早
国家行业
中国金融科技2217960816.36363620182002
媒体和娱乐178230484.11764720152003
美国云计算326880215.00000020152000
共享经济65670945.00000020172008
金融科技215020239.04761920172000
.....................
日本区块链17070.00000020142014
法国人工智能17070.00000020162016
媒体和娱乐17070.00000020062006
爱沙尼亚共享经济17070.00000020132013
法国健康科技17070.00000020132013

之后我们将目光投向“部分投资机构”

丞相弩的pandas基础笔记,Cho,Ko,Nu的博客,服务器与客户端ip
从这张截图中我们可以看出,每一个机构都是用顿号“、”进行分隔,因此我们可以利用这个“、”来进行分割。

1
split表示以"、"为分隔符对字符串进行分割expand=True,这个参数直接将分列后的结果转换成DataFrame。
012345
0春华资本中投海外红杉资本NoneNoneNone
1红杉资本海纳亚洲纪源资本启明创投NoneNone
2腾讯阿里巴巴红杉资本经纬中国纪源资本None
3Golden Gate Capital, Koch Equity DevelopmentNoneNoneNoneNoneNone
4M13, Timothy Davis, Evolution VC Partners, Tig...NoneNoneNoneNoneNone
.....................
489GPI Capital, GSO Capital PartnersNoneNoneNoneNoneNone
490顺为资本达晨创投华平投资NoneNoneNone
491腾讯NoneNoneNoneNoneNone
492Sequoia Capital, Visionnaire Ventures, Katalys...NoneNoneNoneNoneNone
493IVP (Institutional Venture Partners)NoneNoneNoneNoneNone

我们可以看出,最后一列“部分投资机构”已经被分割并制成表格了。

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

isnumeric 判断是否为数字(没什么卵用,先留着看看)
2

数据透视

drop()删除方法

先做一些准备,将企业名称掌门人\创始人提取出来做成一个新表格。

3
企业名称掌门人/创始人
序号
0蚂蚁金服井贤栋
1字节跳动张一鸣
2滴滴出行程维
3InforJim Schaper
4JUUL LabsAdam Bowen, James Monsees, Kevin Burns, Tim Da...
.........
489Zeta GlobalDavid A. Steinberg, John Sculley
490掌门1对1张翼
491转转姚劲波
492Zipline InternationalKeenan Wyrobek, Keller Rinaudo, Will Hetzler
493ZipRecruiterIan Siegel, Joe Edmonds, Ward Poulos, Willis Redd
drop()删除某列,作为准备合并的表格
4
企业名称
序号
0蚂蚁金服
1字节跳动
2滴滴出行
3Infor
4JUUL Labs
......
489Zeta Global
490掌门1对1
491转转
492Zipline International
493ZipRecruiter

使用drop()方法删除**‘掌门人/创始人’**一列。

准备合并的一对列

5

注意:rename一定要写,相当于给这个表格命名,否则不让合并。

6
序号掌门人/创始人
00井贤栋
11张一鸣
22程维
33Jim Schaper
44Adam Bowen
.........
906492Will Hetzler
907493Ian Siegel
908493Joe Edmonds
909493Ward Poulos
910493Willis Redd
也可以写成这样
3df_独角兽_创始人_准备.index.name="序号"df_独角兽_创始人 =pd.merge(df_独角兽_创始人_准备.drop('掌门人/创始人', axis=1),\                          df['掌门人/创始人'].str.split(',', expand=True)\                                            .stack().reset_index(level=1,drop=True)                                            .rename('掌门人/创始人'),\                          on="序号")

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

8
企业名称掌门人/创始人
序号
0蚂蚁金服井贤栋
1字节跳动张一鸣
2滴滴出行程维
3InforJim Schaper
4JUUL LabsAdam Bowen
.........
492Zipline InternationalWill Hetzler
493ZipRecruiterIan Siegel
493ZipRecruiterJoe Edmonds
493ZipRecruiterWard Poulos
493ZipRecruiterWillis Redd
使用这种方法,相当于将数列展开使用,我们可以看最下面4行——企业名称"ZipRecruiter"的企业有4位创始人,于是我们得到了4个493行,4位“掌门人/创始人”一人占一行。

contains()方法

contains()函数可以查询全表格是否包含某些字符,比如我们查查有“红杉资本”的项目。

9

比较系统地使用如下

import requestsimport lxmlimport pandas as pdfrom lxml import etreeres = 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_帝二排行榜0
部分投资机构企业名称
序号
13红杉资本、晨兴资本、百度、腾讯快手
239百度、红杉资本、真格基金蜜芽
260百度、闻名投资新潮传媒
438百度、蔚来资本首汽约车
477IDG、赛富基金、百度我买网

数据框排序(sorted_values)

首先我们要弄一个展开的表格,把所有的数据全部展开(由于实在太长了,所以我只看前8行)。

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

DataFrame.sort_values (By values)
通过沿任一轴的值对DataFrame进行排序。

DataFrame.sort_index (By index)
按索引对DataFrame进行排序。

import requestsimport lxmlimport pandas as pdfrom lxml import etreeres = 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_帝二排行榜1
成立年份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行。

import requestsimport lxmlimport pandas as pdfrom lxml import etreeres = 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_帝二排行榜2
成立年份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行。

import requestsimport lxmlimport pandas as pdfrom lxml import etreeres = 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_帝二排行榜3
国家中国以色列卢森堡印度印度尼西亚哥伦比亚巴西德国新加坡日本...瑞典瑞士美国芬兰英国菲律宾西班牙阿根廷韩国马耳他
成立年份
2000170.0NaNNaN150.0NaNNaNNaN150.0NaNNaN...NaNNaN210.0NaNNaNNaNNaNNaNNaNNaN
2001170.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN210.0NaNNaNNaNNaNNaNNaNNaN
2002200.0150.0NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN6270.0NaNNaNNaNNaNNaNNaNNaN
2003200.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN420.0NaNNaNNaNNaNNaNNaNNaN
2004100.0NaNNaN150.0NaNNaNNaNNaNNaNNaN...NaNNaN1550.0NaN350.0NaNNaNNaNNaNNaN
2005300.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...300.0NaN840.0NaN150.0NaNNaNNaN70.0NaN
20062380.0NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN810.0NaNNaNNaNNaNNaNNaNNaN
20071280.0NaNNaN70.0NaNNaNNaNNaNNaNNaN...NaNNaN2650.0NaNNaNNaNNaNNaN350.0NaN

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Cho_Ko_Nu/article/details/106290047

宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

扫描二维码推送至手机访问。

版权声明:文章来源于互联网公开页面遵守互联网分享协议,若涉及侵权请联系客服处理。

本文链接:https://www.idchg.com/info/277171/

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。