上一篇总结了Python数据处理包Pandas的DataFrame,介绍了Axes相关的属性和方法。文章的图形展示效果不是很友好,再换一种形式。
同时继续总结,数据框的访问相关的属性和方法。
01
轴(Axes) 相关
构造一个数据框
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
行、列索引
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
行、列索引的类型,统计及筛选
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
整个数据框相关,沿着两个轴的数据统计
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)
创建稠密列、稀疏列,查看类型,比较存储占用的空间
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
判断数据框是否为空
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访问
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对象
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 访问单个值
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 访问整行、整列
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
推荐阅读:
Python数据与机器学习
致力于做最有态度、走心的原创公众号
长按二维码订阅
给个好看
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!