上一篇总结了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]: df
Out[5]:
0 1 2
0 1 gz 2019-04-13
1 3 lg 2019-04-14
2 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]: df
Out[9]:
id nickname register
0 1 gz 2019-04-13
1 3 lg 2019-04-14
2 5 jh 2019-04-15
In [10]: df.index=['p1','p2','p3'] # 为行索引重新赋值
In [11]: df
Out[11]:
id nickname register
p1 1 gz 2019-04-13
p2 3 lg 2019-04-14
p3 5 jh 2019-04-15
行、列索引的类型,统计及筛选
In [12]: df.dtypes # 展示每列的数据类型
Out[12]:
id int64
nickname object
register object
dtype: object
In [13]: df.ftypes # 展示每列为稠密(dense)或者稀疏(sparse)
Out[13]:
id int64:dense
nickname object:dense
register object:dense
dtype: object
In [14]: df.get_dtype_counts() # 统计列类型
Out[14]:
int64 1
object 2
dtype: int64
In [15]: df.select_dtypes(include=['int']) # 根据列类型(如为int,或者object)筛选数据
Out[15]:
id
p1 1
p2 3
p3 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.axes
Out[18]:
[Index(['p1', 'p2', 'p3'], dtype='object'),
Index(['id', 'nickname', 'register'], dtype='object')]
In [19]: df.size
Out[19]: 9
In [20]: df.ndim
Out[20]: 2
In [21]: df.shape
Out[21]: (3, 3)
创建稠密列、稀疏列,查看类型,比较存储占用的空间
In [22]: df.loc[:,'gender']=['Male',None,None] # 稠密列
In [23]: df
Out[23]:
id nickname register gender
p1 1 gz 2019-04-13 Male
p2 3 lg 2019-04-14 None
p3 5 jh 2019-04-15 None
In [24]: dfspa = df.copy()
In [25]: dfspa
Out[25]:
id nickname register gender
p1 1 gz 2019-04-13 Male
p2 3 lg 2019-04-14 None
p3 5 jh 2019-04-15 None
In [27]: dfspa.loc[:,'gender']=pd.SparseArray(['Male',None,None]) # 稀疏列
In [28]: dfspa
Out[28]:
id nickname register gender
p1 1 gz 2019-04-13 Male
p2 3 lg 2019-04-14 NaN
p3 5 jh 2019-04-15 NaN
In [30]: dfspa.dtypes # 查看稀疏列的类型
Out[30]:
id int64
nickname object
register object
gender Sparse[object, nan]
dtype: object
In [31]: df.dtypes
Out[31]:
id int64
nickname object
register object
gender object
dtype: object
In [32]: df.memory_usage()
Out[32]:
Index 24
id 24
nickname 24
register 24
gender 24
dtype: int64
In [33]: dfspa.memory_usage() # 稀疏列更加节省内存空间
Out[33]:
Index 104
id 24
nickname 24
register 24
gender 12
dtype: int64
判断数据框是否为空
In [35]: df.empty
Out[35]: False
In [41]: dfemp = pd.DataFrame([])
In [42]: dfemp
Out[42]:
Empty DataFrame
Columns: []
Index: []
In [43]: dfemp.empty
Out[43]: True
In [44]: dfemp = pd.DataFrame([[]],index=['a','b'])
In [45]: dfemp
Out[45]:
Empty DataFrame
Columns: []
Index: [a, b]
02
索引(Indexing) 相关
get访问
In [47]: df
Out[47]:
id nickname register gender
p1 1 gz 2019-04-13 Male
p2 3 lg 2019-04-14 None
p3 5 jh 2019-04-15 None
In [48]: df.get('id')
Out[48]:
p1 1
p2 3
p3 5
Name: id, dtype: int64
In [53]: df.get('id').get('p2')
Out[53]: 3
In [54]: type(df.get('id').get('p2'))
Out[54]: numpy.int64
In [56]: df.get('id').get('p22') # 如果key不存在,返回默认值None
In [62]: df.get('id').get('p22')==None # 验证
Out[62]: True
item 返回原生Python对象
In [52]: df.get('id').get('p2').item() # item返回Python原生对象
Out[52]: 3
In [55]: type(df.get('id').get('p2').item()) # 验证
Out[55]: int
at , iat 访问单个值
In [63]: df
Out[63]:
id nickname register gender
p1 1 gz 2019-04-13 Male
p2 3 lg 2019-04-14 None
p3 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 gender
p1 1 gz 2019-04-13 Male
p2 3 lg 2019-04-14 None
p3 5 jh 2019-04-15 None
In [72]: df.loc['p3','nickname'] # 此种访问建议走at访问模式
Out[72]: 'jh'
In [73]: df.loc['p2'] # 行标签访问整行
Out[73]:
id 3
nickname lg
register 2019-04-14
gender None
Name: p2, dtype: object
In [74]: df.loc['nickname'] # 报错!
In [75]: df.loc[:,'nickname']
Out[75]:
p1 gz
p2 lg
p3 jh
Name: nickname, dtype: object
In [76]: df.iloc[2] # 访问行整数索引为2的行
Out[76]:
id 5
nickname jh
register 2019-04-15
gender None
Name: p3, dtype: object
In [77]: df.iloc[:,3] # 访问列整数索引为3的列
Out[77]:
p1 Male
p2 None
p3 None
Name: gender, dtype: object
03
好书每周送
它是Python数据分析领域最畅销的一本书,定价119元。这么一本含金量高的书,能免费包邮到家吗? 能!并且,大家如果参与度高,我们每周都至少送1本。
感谢机械工业出版社的大力支持!
购买链接
在看或分享,留言:day几打卡+今日生活有何感悟。每周会从参与度最高的小伙伴中选出。
推荐阅读:
Python数据与机器学习
致力于做最有态度、走心的原创公众号
长按二维码订阅
给个好看