上一篇总结了Python数据处理包Pandas的DataFrame,介绍了Axes相关的属性和方法。文章的图形展示效果不是很友好,再换一种形式。
同时继续总结,数据框的访问相关的属性和方法。
01
轴(Axes) 相关
构造一个数据框
In [1]: import datetime as dtIn [3]: import pandas as pdIn [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-15In [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: objectIn [13]: df.ftypes # 展示每列为稠密(dense)或者稀疏(sparse)Out[13]:id int64:densenickname object:denseregister object:densedtype: objectIn [14]: df.get_dtype_counts() # 统计列类型Out[14]:int64 1object 2dtype: int64In [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]: 9In [20]: df.ndimOut[20]: 2In [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 NoneIn [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 NoneIn [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 NaNIn [30]: dfspa.dtypes # 查看稀疏列的类型Out[30]:id int64nickname objectregister objectgender Sparse[object, nan]dtype: objectIn [31]: df.dtypesOut[31]:id int64nickname objectregister objectgender objectdtype: objectIn [32]: df.memory_usage()Out[32]:Index 24id 24nickname 24register 24gender 24dtype: int64In [33]: dfspa.memory_usage() # 稀疏列更加节省内存空间Out[33]:Index 104id 24nickname 24register 24gender 12dtype: int64
判断数据框是否为空
In [35]: df.emptyOut[35]: FalseIn [41]: dfemp = pd.DataFrame([])In [42]: dfempOut[42]:Empty DataFrameColumns: []Index: []In [43]: dfemp.emptyOut[43]: TrueIn [44]: dfemp = pd.DataFrame([[]],index=['a','b'])In [45]: dfempOut[45]:Empty DataFrameColumns: []Index: [a, b]
02
索引(Indexing) 相关
get访问
In [47]: dfOut[47]:id nickname register genderp1 1 gz 2019-04-13 Malep2 3 lg 2019-04-14 Nonep3 5 jh 2019-04-15 NoneIn [48]: df.get('id')Out[48]:p1 1p2 3p3 5Name: id, dtype: int64In [53]: df.get('id').get('p2')Out[53]: 3In [54]: type(df.get('id').get('p2'))Out[54]: numpy.int64In [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]: dfOut[63]:id nickname register genderp1 1 gz 2019-04-13 Malep2 3 lg 2019-04-14 Nonep3 5 jh 2019-04-15 NoneIn [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]: dfOut[71]:id nickname register genderp1 1 gz 2019-04-13 Malep2 3 lg 2019-04-14 Nonep3 5 jh 2019-04-15 NoneIn [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: objectIn [74]: df.loc['nickname'] # 报错!In [75]: df.loc[:,'nickname']Out[75]:p1 gzp2 lgp3 jhName: nickname, dtype: objectIn [76]: df.iloc[2] # 访问行整数索引为2的行Out[76]:id 5nickname jhregister 2019-04-15gender NoneName: p3, dtype: objectIn [77]: df.iloc[:,3] # 访问列整数索引为3的列Out[77]:p1 Malep2 Nonep3 NoneName: gender, dtype: object
03
好书每周送
它是Python数据分析领域最畅销的一本书,定价119元。这么一本含金量高的书,能免费包邮到家吗? 能!并且,大家如果参与度高,我们每周都至少送1本。
感谢机械工业出版社的大力支持!
购买链接
在看或分享,留言:day几打卡+今日生活有何感悟。每周会从参与度最高的小伙伴中选出。
推荐阅读:
Python数据与机器学习
致力于做最有态度、走心的原创公众号
长按二维码订阅
给个好看