写点什么

学会 Pandas 这六大函数,数据分析够用了

作者:happymove
  • 2022 年 5 月 30 日
  • 本文字数:3707 字

    阅读完需:约 12 分钟

学会Pandas这六大函数,数据分析够用了

首先看到 pandas 的这个词,大家会想到熊猫,其实 pandas 是一个专业处理数据的 python 包,具有非常强大的功能。在我们日常生活中,最经常接触到场景就是处理表格,有时候表格可能会很大,用 excel 打开会很卡,很多处理函数用起来也不是那么方便。这时候我们可以试试 python 语言中的 pandas,对于 excel 中可以实现的功能,pandas 都可以涵盖。


下面说说我们在使用 pandas 过程中,最经常用到的 6 个函数,你掌握了这些函数,日常的数据分析就不用怕了。


下面以最新的基金净值数据为例,来介绍 pandas 是如何来处理数据的。数据来源于使用 akshare 在线爬取最新的数据,日常处理本地的数据会使用 pandas 的 read_xlsx 函数读取本地数据进行处理,数据会以 DataFrame 的类型存储。这里的爬取到的基金数据,在 python 中也是直接以 DataFrame 的类型存储,故后续讨论的函数方法都适用。


>>> import akshare as ak>>> import pandas as pd#公募基金基础信息>>> fund_name_em_df = ak.fund_name_em()#公募基金的净值信息>>> fund_open_fund_daily_em_df = ak.fund_open_fund_daily_em()
#查看公募基金基础信息表的基本信息>>> fund_name_em_df.info()#输出如下:<class 'pandas.core.frame.DataFrame'>RangeIndex: 16259 entries, 0 to 16258Data columns (total 5 columns): # Column Non-Null Count Dtype--- ------ -------------- ----- 0 基金代码 16259 non-null object 1 拼音缩写 16259 non-null object 2 基金简称 16259 non-null object 3 基金类型 16259 non-null object 4 拼音全称 16259 non-null objectdtypes: object(5)memory usage: 635.2+ KB#数据的基本信息输出如下,数据共16259行
#查看数据的前6行>>> fund_name_em_df.head()#输出如下基金代码 拼音缩写 基金简称 基金类型 拼音全称0 000001 HXCZHH 华夏成长混合 混合型-偏股 HUAXIACHENGZHANGHUNHE1 000002 HXCZHH 华夏成长混合(后端) 混合型-偏股 HUAXIACHENGZHANGHUNHE2 000003 ZHKZZZQA 中海可转债债券A 债券型-可转债 ZHONGHAIKEZHUANZHAIZHAIQUANA3 000004 ZHKZZZQC 中海可转债债券C 债券型-可转债 ZHONGHAIKEZHUANZHAIZHAIQUANC4 000005 JSZQXYDQZQ 嘉实增强信用定期债券 债券型-长债 JIASHIZENGQIANGXINYONGDINGQIZHAIQUAN
#查看公募基金净值信息表的基本信息>>> fund_open_fund_daily_em_df.info()<class 'pandas.core.frame.DataFrame'>RangeIndex: 14298 entries, 0 to 14297Data columns (total 11 columns): # Column Non-Null Count Dtype--- ------ -------------- ----- 0 基金代码 14298 non-null object 1 基金简称 14298 non-null object 2 2022-05-27-单位净值 14298 non-null object 3 2022-05-27-累计净值 14298 non-null object 4 2022-05-26-单位净值 14298 non-null object 5 2022-05-26-累计净值 14298 non-null object 6 日增长值 14298 non-null object 7 日增长率 14298 non-null object 8 申购状态 14298 non-null object 9 赎回状态 14298 non-null object 10 手续费 14298 non-null objectdtypes: object(11)memory usage: 1.2+ MB
>>> fund_open_fund_daily_em_df.head() 基金代码 基金简称 2022-05-27-单位净值 ... 申购状态 赎回状态 手续费0 013171 华夏恒生互联网科技业ETF联接(QDII)A 0.7271 ... 限大额 开放赎回 0.12%1 013172 华夏恒生互联网科技业ETF联接(QDII)C 0.7255 ... 限大额 开放赎回 0.00%2 012804 广发恒生科技指数(QDII)A 0.7162 ... 开放申购 开放赎回 0.12%3 012805 广发恒生科技指数(QDII)C 0.7152 ... 开放申购 开放赎回 0.00%4 012348 天弘恒生科技指数(QDII)A 0.5925 ... 开放申购 开放赎回 0.10%
##在进行处理之前,需要将上述数据zhong
复制代码


  1. 首先介绍一下 apply


看看这个词的字面意思是应用,在 pandas 中 apply 的使用场景在,我们需要对一列,或者多列进行操作。使用 apply 与遍历每一行去处理的好处是可以提高运行速度。


#我们需要提取基金类型中-前面的类型>>> fund_name_em_df['fundtype'] = fund_name_em_df['基金类型'].apply(lambda x: x.split('-')[0])0        混合型1        混合型2        债券型3        债券型4        债券型        ...16254    债券型16255    债券型16256    债券型16257    债券型16258    债券型Name: 基金类型, Length: 16259, dtype: object#apply不止可以操纵一列,也可以操纵多列,这里一定要注意,在操纵多列的时候,后面一定要加上 axis=1>>> fund_name_em_df.apply(lambda x: x['基金类型'].split('-')[0] + x['基金简称'],axis = 1)0                       混合型华夏成长混合1                   混合型华夏成长混合(后端)2                     债券型中海可转债债券A3                     债券型中海可转债债券C4                   债券型嘉实增强信用定期债券                   ...16253     债券型招商资管增益添彩一个月持有期中短债债券C16254    债券型兴证资管金麒麟悦享添利30天滚动持有债券A16255    债券型兴证资管金麒麟悦享添利30天滚动持有债券B16256    债券型兴证资管金麒麟悦享添利30天滚动持有债券C16257              债券型太平洋六个月滚动持有债Length: 16258, dtype: object
复制代码


  1. 下面介绍一下 merge


看看这个词的字面意识是融合,主要应用在讲两张表合并成一张表,这与我们在 excel 中经常使用的 vlookup 函数作用很像.


##将两张表进行按照一列进行合并>>> df = fund_name_em_df.merge(fund_open_fund_daily_em_df,on="基金代码")         基金代码                  拼音缩写                基金简称_x     基金类型  ... 日增长率  申购状态  赎回状态    手续费0      000001                HXCZHH                华夏成长混合   混合型-偏股  ...       开放申购  开放赎回  0.15%   1      000003              ZHKZZZQA              中海可转债债券A  债券型-可转债  ...       开放申购  开放赎回  0.08% ...       ...                   ...                   ...      ...  ...  ...   ...   ...    ...14296  970166  ZSZGZYTCYGYCYQZDZZQC  招商资管增益添彩一个月持有期中短债债券C  债券型-混合债  ...       开放申购  开放赎回  0.00%14297  980003           TPYLGYGDCYZ           太平洋六个月滚动持有债   债券型-长债  ...       开放申购  开放赎回  0.05%
[14298 rows x 15 columns]##第二种写法#pd.merge(fund_name_em_df,fund_open_fund_daily_em_df,on="基金代码")
复制代码


  1. value_counts

  2. 这个函数的使用在日常的使用频率还是很高,可以用来快速统计当前列数据的分布情况。


>>> df.fundtype.value_counts()混合型           6743债券型           4543指数型           1402股票型            798FOF            385QDII           356混合              41商品(不含QDII)      30Name: fundtype, dtype: int64
复制代码
  1. groupby 分组

  2. agg 聚合

上面介绍两个函数,这两个函数一般会经常一起使用,后一个函数的全称是 aggregation,是聚合的意思。这里我们可以分组计算不同类型的基金的手续费的平均值。


#去除手续费为空的数据,将手续费转化为可计算的float类型df = df.loc[df['手续费'] != ""]df['cost'] = df['手续费'].apply(lambda x : float(x.split('%')[0])/100)>>> df.groupby("fundtype")['cost'].agg('mean')fundtypeFOF           0.001684QDII          0.003687债券型           0.001478商品(不含QDII)    0.000431指数型           0.000633混合            0.001227混合型           0.001324股票型           0.001207Name: cost, dtype: float64##从中我们可以看到QDII基金的手续费是最高的
复制代码


  1. read_sql


看字面意思是读取 sql 语句,作用为 pandas 可以远程执行 sql 语句,并将 sql 运行到的结果返回为 DataFrame 类型。


很多时候,我们的数据处理存放在 excel 中,也会存放在数据库中。平时我们需要处理这些数据时,最常见的办法就是使用数据库连接软件中,编写 sql 语句,进行操作。如果你有了 python,你就再也不用这个数据库连接软件,直接可以在 python 中编写你的 sql 代码。目前 pandas 支持所有主流的数据库,比如 mysql,sqlserver, sqlite 等数据库。


#以pandas查询mysql数据库为例import pymysqlconn = pymysql.connect(host='localhost',user='user',password='password',                       databse='test',port=3306,chartset='utf8')df = pd.read_sql('SELECT * FROM test_table', conn)
复制代码


发布于: 刚刚阅读数: 4
用户头像

happymove

关注

还未添加个人签名 2022.05.02 加入

还未添加个人简介

评论

发布
暂无评论
学会Pandas这六大函数,数据分析够用了_Python_happymove_InfoQ写作社区