pandas(零)数据结构
pandas的两个主要的数据结构:
Series
series是一种类似于一维数组的对象,它由一组数据(NumPy数组类型的数据)和一组与之相关的数据标签(索引)组成。
1 from pandas import Series 2 3 obj = Series((1,2,3,4,5)) 4 obj.index #索引,默认从0开始的整数 5 obj.values #array数组 6 7 #自定义索引的Series 8 obj_with_index = Series([4,65,3,4],index=['a','b','c','d']) 9 print(obj_with_index)
可以通过索引的方式选取或修改单个或一组值
1 >>> from pandas import Series 2 >>> obj = Series([1,2,3,4],index=('a','b','c','d')) 3 >>> obj 4 a 1 5 b 2 6 c 3 7 d 4 8 dtype: int64 9 >>> obj['a'] 10 1 11 >>> obj['c'] = 8 12 >>> obj 13 a 1 14 b 2 15 c 8 16 d 4 17 18 >>> obj[('a','b','d')] = (11,12,14) 19 >>> obj 20 a 11 21 b 12 22 c 8 23 d 14 24 dtype: int64 25 >>>
对其对象进行NumPy运算的时候会保留索引和值之间的链接
>>> obj -2 a 9 b 10 c 6 d 12 dtype: int64 >>> obj[obj > 10] a 11 b 12 d 14 dtype: int64 >>>
还可以将Series对象看成一个定长的有序的字典,一个索引和值组成的键值对的映射。
可以应用在很多需要字典参数的函数中,例如函数的关键字参数
利用字典作为参数生成一个自定义索引的Series对象
>>> metadata = {"a":1,"b":2,"c":3} >>> data= Series(metadata) >>> data a 1 b 2 c 3 dtype: int64
根据索引去建对象,如果字典的键中没有在索引中,则不会创建该索引-值的映射,索引不在字典的键中,则会对该索引创建一个Nan值(表示缺失或NA值)
可以利用isnull和notnull去判断是不是Nan值
>>> states = ['b','c','d','e'] >>> obj4 = Series(metadata,index = states) >>> obj4 b 2.0 c 3.0 d NaN e NaN dtype: float64 >>> import pandas as pd >>> pd.isnull(obj4) b False c False d True e True dtype: bool >>> pd.notnull(obj4) b True c True d False e False dtype: bool #series对象本身就有isnull和notnull方法 >>> obj4.isnull() b False c False d True e True dtype: bool >>> obj4.notnull() b True c True d False e False dtype: bool
Series一个最重要的功能就是在算术运算中会自动对齐索引。
Series对象及其索引都有一个name属性
dtype: bool >>> obj4.name ="numpy_array" >>> obj4.index.name = 'letter' >>> obj4 letter b 2.0 c 3.0 d NaN e NaN Name: numpy_array, dtype: float64
DataFrame:
DataFrame是一个表格型的数据结构,它含有一组有序的列,每一列可以是不同的值类型。DataFrame不仅有列索引,还有行索引。DataFrame中的数据是以一个或多个二维块存放的。
用等长列表或NumPy数组组成的字典去创建DataFrame对象
>>> data = {'name':['li','wang','yang','sun'],'height':[1.7,1.8,1.6,1.55],'age':[30,31,34,61]} >>> df_obj = DataFrame(data) >>> df_obj age height name 0 30 1.70 li 1 31 1.80 wang 2 34 1.60 yang 3 61 1.55 sun
如果原始数据是嵌套的字典,会将外层字典的建作为列,内层字典的键做为行索引
如果指定了列序列,就会按照指定的列序列的顺序进行排列,行序列会自动生成
>>> df_obj = DataFrame(data,columns=['name','age','height']) >>> df_obj name age height 0 li 30 1.70 1 wang 31 1.80 2 yang 34 1.60 3 sun 61 1.55
如果传入的列在数据中找不到也会产生Nan值
>>> df_obj = DataFrame(data,columns=['name','age','height','weight'],index=('a','b','c','d')) >>> df_obj name age height weight a li 30 1.70 NaN b wang 31 1.80 NaN c yang 34 1.60 NaN d sun 61 1.55 NaN >>>
可以通过字典标记的方式或属性的方式,将DataFrame的列获取为一个Series:
>>> df_obj.columns Index(['name', 'age', 'height', 'weight'], dtype='object') >>> df_obj.name a li b wang c yang d sun Name: name, dtype: object >>> df_obj['name'] a li b wang c yang d sun Name: name, dtype: object
ps:在获取列的时候不仅继承了原来的索引,还将Series的name属性设置好了
也可以给列赋值,但如何是将列表或数组赋值给某列,其长度必须跟DataFrame的长度相同,如果复制的是一个Series对象,就会根据索引去精确匹配
>>> df_obj.weight = 200 >>> df_obj name age height weight a li 30 1.70 200 b wang 31 1.80 200 c yang 34 1.60 200 d sun 61 1.55 200
删除列用del关键字
>>> del df_obj['weight']#注意:这里不能用列的属性,即:del df_obj.weigt是错误的 >>> df_obj name age height a li 30 1.70 b wang 31 1.80 c yang 34 1.60 d sun 61 1.55
dataframe对象也可以转置
>>> df_obj.T a b c d name li wang yang sun age 30 31 34 61 height 1.7 1.8 1.6 1.55
索引对象
index对象不能被修改,这样保证了多个数据结构能够安全共享
创建索引对象及在Series或DataFrame中使用
>>> index = pd.Int64Index(range(1,6)) >>> index Int64Index([1, 2, 3, 4, 5], dtype='int64') >>> data = Series((11,22,33,44,55),index=index) >>> data 1 11 2 22 3 33 4 44 5 55 >>> index.append(pd.Index((6,))) Int64Index([1, 2, 3, 4, 5, 6], dtype='int64')
pandas的索引对象
类 | 说明 |
Index | 最泛化的Index对象,将轴标签表示为一个由python对象组成的NumPy数组 |
Int64Index | 针对整数的特殊Index |
MultiIndex | 层次化索引对象,表示单个轴上的多层索引。可以看作由元组组成的数组 |
DatatimeIndex | 存储纳秒级时间戳 |
PeriodIndex | 针对Period数据(时间间隔)的特殊Index |
Index对象的方法与属性
方法 | 属性 |
---|---|
append | 链接另一个index对象,产生一个新的Index |
diff | 计算差集,并得到一个Index |
intersection | 计算交集 |
union | 计算并集 |
isin | 计算一个指示各值是否都包含在参数集合中的布尔型数组 |
delete | 产出索引i出的元素,并得到新的Index |
drop | 删除传入的值,并得到新的Index |
insert | 将元素插入到索引i处,并得到新的Index |
is_monotonic | 将各元素均大于等于前一个元素时,返回True |
is_unique | 将Index没有重复值时,返回True |
unique | 返回Index中唯一的数组 |