panadas提供两个常用的数据类型:Series、Dataframe
一、Series
pandas的数据类型,有index和value
Series类型类似于Numpy的一维数组对象,可以将该类型看做事一组数据与数据相关的标签(索引)联合而构成(带有标签的一维数组对象)。
# 通过列表创建
# Series使用类似字典的方式,进行存储,其中,标签就是字典的key,数据就是字典的value
s1 = pd.Series([1,2,3,4])
0 1
1 2
2 3
3 4
dtype: int64
s1.values
array([1, 2, 3, 4], dtype=int64)
s1.index
RangeIndex(start=0, stop=4, step=1)
s2 = pd.Series(np.arange(10))
# 通过字典的形式创建
s3 = pd.Series({
'1':1, '2':2, '3':3})
s3.values
array([1, 2, 3], dtype=int64)
# index就是字典的key
s3.index
Index(['1', '2', '3'], dtype='object')
# 可以指定index,如果index数大于value,value会广播,没有指定,自动生成0,1,2
s4 = pd.Series([1,2,3,4], index=['A','B','C','D'])
A 1
B 2
C 3
D 4
dtype: int64
s4['A'] # 1
s4.to_dict() # 转换为字典
s4[s4>2]
C 3
D 4
dtype: int64
# 也可以创建一个Index对象,传入给index参数(创建Series时)
# 当多个series需要相同的index时,就是用这种方式
index_1 = ['A','B','C','D','E']
s6 = pd.Series(s4, index=index_1)
A 1.0
B 2.0
C 3.0
D 4.0
E NaN
dtype: float64
# values类似于字典的values方法(这里是属性)返回series中的相关数据
s.values # 值
s.shape # 数据形状
s.size # 数据个数
s.dtype
ones = pd,Series([1,2,3,float("NaN"), None, np,nan])
pd.isnull(s6)
0 False
1 False
2 False
3 True
4 True
5 True
dtype: bool
pd.notnull(s6)
# Series的name属性可以通过创建Series时,指定name的参数来设置
# name是Series的属性,其作用不仅仅体现在输出中
s=pd.Seriex([1,2,3], index=[5,7,7], name='Seriex的name属性的名字')
my_index = pd.Index([1,2,3], name='Index的name属性的名字')
s6.name = 'demo' # 给Series取名字
s6.index.name = 'demo index' # 给Series index取名字
# head与tail
# 最多显示前n/后n个数据,如果没有给定参数,则参数值迷人为5.
s.head()
s.tail()
# Series只支持一维的数据结构
# ndarry与Series都可以通过索引来访问元素,但是二者是有区别的,对于ndarry类型与裂变的形式,是基于位置进行的访问,在创建对象后,每个元素的位置固定了,我们不能自行去改变元素的索引。
# 对于Series,类似于字典的形式,是基于key值进行访问元素的,我们可以自行去改变(指定)key值。
# Series也能进行标量或矢量化运算,但是Sreies的规则与ndarry是不太相同的。
#对于ndarry,时进行对位的计算(根据元素的位置进行计算),对于Series会根据索引进行对齐计算,如果索引无法进行匹配,则会产生空值(NaN)
s + s2
# 同时,Series提供了用于计算的方法,例如add,multiply等,方法没有运算符简便,但是,方法可以提供更多的行为,可以指定fill_value参数,当索引无法匹配时,使用fill_value进行填充。
s.add(s2, fill_value=100)
# ndarry提供的统计函数,rum,mean等,也适用于Sreies类型。
# ndarry数组与Series在计算时,对控制的处理不太相同,对于ndarry数组会产生空值,对于Serise,会忽略空值。
s = pd.Series(