前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >趣学Python数据分析:轴和索引

趣学Python数据分析:轴和索引

作者头像
double
发布2019-05-29 11:28:32
5710
发布2019-05-29 11:28:32
举报
文章被收录于专栏:算法channel算法channel

上一篇总结了Python数据处理包Pandas的DataFrame,介绍了Axes相关的属性和方法。文章的图形展示效果不是很友好,再换一种形式。

同时继续总结,数据框的访问相关的属性和方法。

01

轴(Axes) 相关

构造一个数据框

代码语言:javascript
复制
In [1]: import datetime as dt
In [3]: import pandas as pd
In [4]: df = pd.DataFrame([[1,'gz',dt.date(2019,4,13)],[3,'lg',dt.date(2019,4,14   ...: )],[5,'jh',dt.date(2019,4,15)]])
In [5]: dfOut[5]:    0   1           20  1  gz  2019-04-131  3  lg  2019-04-142  5  jh  2019-04-15

行、列索引

代码语言:javascript
复制
In [6]: df.index  # 展示行索引Out[6]: RangeIndex(start=0, stop=3, step=1)
In [7]: df.columns  # 展示列索引Out[7]: RangeIndex(start=0, stop=3, step=1)
In [8]: df.columns=['id','nickname','register']  # 为列索引重新赋值
In [9]: dfOut[9]:    id nickname    register0   1       gz  2019-04-131   3       lg  2019-04-142   5       jh  2019-04-15
In [10]: df.index=['p1','p2','p3']   # 为行索引重新赋值
In [11]: dfOut[11]:     id nickname    registerp1   1       gz  2019-04-13p2   3       lg  2019-04-14p3   5       jh  2019-04-15

行、列索引的类型,统计及筛选

代码语言:javascript
复制
In [12]: df.dtypes  # 展示每列的数据类型Out[12]: id           int64nickname    objectregister    objectdtype: object
In [13]: df.ftypes   # 展示每列为稠密(dense)或者稀疏(sparse)Out[13]: id           int64:densenickname    object:denseregister    object:densedtype: object
In [14]: df.get_dtype_counts()  # 统计列类型Out[14]: int64     1object    2dtype: int64
In [15]: df.select_dtypes(include=['int'])  # 根据列类型(如为int,或者object)筛选数据Out[15]:     idp1   1p2   3p3   5

整个数据框相关,沿着两个轴的数据统计

代码语言:javascript
复制
In [16]: df.values  # 返回NumPy数据对象Out[16]: array([[1, 'gz', datetime.date(2019, 4, 13)],       [3, 'lg', datetime.date(2019, 4, 14)],       [5, 'jh', datetime.date(2019, 4, 15)]], dtype=object)
In [17]: df.get_values()  # 稀疏值转稠密后,返回NumPy数据对象Out[17]: array([[1, 'gz', datetime.date(2019, 4, 13)],       [3, 'lg', datetime.date(2019, 4, 14)],       [5, 'jh', datetime.date(2019, 4, 15)]], dtype=object)
In [18]: df.axesOut[18]: [Index(['p1', 'p2', 'p3'], dtype='object'), Index(['id', 'nickname', 'register'], dtype='object')]
In [19]: df.sizeOut[19]: 9
In [20]: df.ndimOut[20]: 2
In [21]: df.shapeOut[21]: (3, 3)

创建稠密列、稀疏列,查看类型,比较存储占用的空间

代码语言:javascript
复制
In [22]: df.loc[:,'gender']=['Male',None,None]   # 稠密列
In [23]: dfOut[23]:     id nickname    register genderp1   1       gz  2019-04-13   Malep2   3       lg  2019-04-14   Nonep3   5       jh  2019-04-15   None
In [24]: dfspa = df.copy()                                                      
In [25]: dfspaOut[25]:     id nickname    register genderp1   1       gz  2019-04-13   Malep2   3       lg  2019-04-14   Nonep3   5       jh  2019-04-15   None
In [27]: dfspa.loc[:,'gender']=pd.SparseArray(['Male',None,None])   # 稀疏列
In [28]: dfspaOut[28]:     id nickname    register genderp1   1       gz  2019-04-13   Malep2   3       lg  2019-04-14    NaNp3   5       jh  2019-04-15    NaN
In [30]: dfspa.dtypes        # 查看稀疏列的类型Out[30]: id                        int64nickname                 objectregister                 objectgender      Sparse[object, nan]dtype: object
In [31]: df.dtypesOut[31]: id           int64nickname    objectregister    objectgender      objectdtype: object
In [32]: df.memory_usage()                                                      Out[32]: Index       24id          24nickname    24register    24gender      24dtype: int64
In [33]: dfspa.memory_usage()  # 稀疏列更加节省内存空间Out[33]: Index       104id           24nickname     24register     24gender       12dtype: int64

判断数据框是否为空

代码语言:javascript
复制
In [35]: df.emptyOut[35]: False
In [41]: dfemp = pd.DataFrame([])In [42]: dfempOut[42]: Empty DataFrameColumns: []Index: []
In [43]: dfemp.emptyOut[43]: True
In [44]: dfemp = pd.DataFrame([[]],index=['a','b'])In [45]: dfempOut[45]: Empty DataFrameColumns: []Index: [a, b]

02

索引(Indexing) 相关

get访问

代码语言:javascript
复制
In [47]: df                                                                     Out[47]:     id nickname    register genderp1   1       gz  2019-04-13   Malep2   3       lg  2019-04-14   Nonep3   5       jh  2019-04-15   None
In [48]: df.get('id')Out[48]: p1    1p2    3p3    5Name: id, dtype: int64
In [53]: df.get('id').get('p2')Out[53]: 3In [54]: type(df.get('id').get('p2'))Out[54]: numpy.int64
In [56]: df.get('id').get('p22') # 如果key不存在,返回默认值NoneIn [62]: df.get('id').get('p22')==None    # 验证Out[62]: True

item 返回原生Python对象

代码语言:javascript
复制
In [52]: df.get('id').get('p2').item()        # item返回Python原生对象Out[52]: 3In [55]: type(df.get('id').get('p2').item())  # 验证Out[55]: int

at , iat 访问单个值

代码语言:javascript
复制
In [63]: df                                                                     Out[63]:     id nickname    register genderp1   1       gz  2019-04-13   Malep2   3       lg  2019-04-14   Nonep3   5       jh  2019-04-15   None
In [64]: df.at['p3','register']   # at 通过行、列标签访问Out[64]: datetime.date(2019, 4, 15)
In [65]: df['nickname'].at['p2']Out[65]: 'lg'
# 如果访问的key不存在,抛出KeyError错误
In [68]: df.iat[1,3]          # 通过整数索引访问,像matlab那样访问数据                                                 
In [69]: df.iat[0,1]Out[69]: 'gz'
In [70]: df.iat[2,2]Out[70]: datetime.date(2019, 4, 15)

loc, iloc 访问整行、整列

代码语言:javascript
复制
In [71]: df                                                                     Out[71]:     id nickname    register genderp1   1       gz  2019-04-13   Malep2   3       lg  2019-04-14   Nonep3   5       jh  2019-04-15   None
In [72]: df.loc['p3','nickname']   # 此种访问建议走at访问模式Out[72]: 'jh'
In [73]: df.loc['p2']  # 行标签访问整行Out[73]: id                   3nickname            lgregister    2019-04-14gender            NoneName: p2, dtype: object
In [74]: df.loc['nickname']  # 报错!
In [75]: df.loc[:,'nickname']Out[75]: p1    gzp2    lgp3    jhName: nickname, dtype: object
In [76]: df.iloc[2]   # 访问行整数索引为2的行Out[76]: id                   5nickname            jhregister    2019-04-15gender            NoneName: p3, dtype: object
In [77]: df.iloc[:,3]     # 访问列整数索引为3的列Out[77]: p1    Malep2    Nonep3    NoneName: gender, dtype: object03

推荐阅读:

4 个Python数据读取的常见错误

头条、阿里、快手、百度面试实录

Python数据与机器学习

致力于做最有态度、走心的原创公众号

长按二维码订阅

给个好看

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档