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中唯一的数组

转载于:https://www.cnblogs.com/zuoshoushizi/p/8729173.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值