Series的索引和切片

   可以取中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的仍然是一个Series类型)

    分为显示索引隐式索引

(1) 显示索引 (必须给索引的值):

    -- 使用index中的元素作为索引值
    -- 使用 .loc[]  (推荐)

注意此时是闭区间

import numpy as np from pandas import Series # 创建好Series s = Series(np.random.random(10),index=list('abcdefghig')) print(s) print(s['a']) # 可以直接取出行号为 'a' 的数据 print(s.loc['a']) # 通过 .loc[] 的 方式取出索引为'a'的值 ''' 运行结果: a 0.866009 b 0.173073 c 0.679109 d 0.247098 e 0.115333 f 0.085793 g 0.135284 h 0.203943 i 0.125305 g 0.564275 dtype: float64 0.8598185678819752 0.8598185678819752 '''

(2) 隐式索引:

   --- 使用整数作为索引值
   --- 使用  .iloc[]  (推荐)

 注意: 此时是半开区间

print(s[0]) # 通过[]整数的方法取出相应索引的值 print(s.iloc[0]) # 通过 .iloc[] 取出相应索引的值 """ 运行结果: 0.32848002630924467 0.32848002630924467 """

(3) 切片   (代码实例)

# 切片 '''# 取出索引值为 'a'到'e'的值''' print(s['a':'e']) '''# 取出从第一个开始到第五个''' print(s[0:5]) '''取的方法和列表大致相同'''

 

 Series的基本概念

    1. 可以把Series看成一个定长的有序字典
         可以通过shape,size,index,values等得到series的属性

'''# 打印Series的形状 对于Series而言只能是一维的''' print(s.shape) # 结果 (10,) 代表 10 行 '''# 打印出Series的大小''' print(s.size) # 结果 10 '''打印出索引值''' print(s.index) # 结果 Index(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g'], dtype='object') '''打印出所有的值''' print(s.values) # 结果 [0.08580958 0.06484278 0.86393773 0.99667033 0.93736993 0.55856375 # 0.86119536 0.396556 0.30890221 0.51369992]

2. 可以通过head(),tail()快速查看Series对象的样式

     对于大数据来说,读取文件的前几行和读取文件的后几行来说是非常必要的

'''head()方法,打印前几行,默认只打印前5行''' print(s.head()) '''可以给head()方法中传递正整数值,数值为几,就打印前几行''' print(s.head(7)) # 打印前7行 '''tail()方法,打印后几行,默认只打印后5行''' print(s.tail()) '''可以给tail()方法中传递正整数值,数值为几,就打印后几行''' print(s.tail(7)) # 打印后5行

3.当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况

s1 = Series([1, 26, None, np.nan], index=list('金木水火')) print(s1) """ 运行结果: 金 1.0 木 26.0 水 NaN 火 NaN dtype: float64 """

    有空值时,是可以进行加和等运算的,Series会自动将无效的空值等转化为float型,而在numpy的类型中是不可以的  

4.可以使用pd.isnull(),pd.notnull(),或自带isnull(),notnull()函数检测缺失数据

'''判断Series是否为空,返回的类型还是Series''' print(s1.isnull()) """ 结果 金 False 木 False 水 True 火 True dtype: bool """ '''判断Series不为空吗 , 为空返回False,不为空返回True''' print(s1.notnull()) """ 结果: 金 True 木 True 水 False 火 False dtype: bool """ '''取出Series中不为空的数据 Series[Series.notnull()]''' print(s1[s1.notnull()]) """ 金 1.0 木 26.0 dtype: float64 """

5.Series对象本身及其索引都有一个name属性,  

    name的作用: 区分,在DataFrame中用于区分,在DataFrame中是列名

s1.name = '元素' print(s1) # 然后就会有Name属性 """ 结果: 金 1.0 木 26.0 水 NaN 火 NaN Name: 元素, dtype: float64 """

在运算中自动对齐不同索引的数据
如果索引不对应,则补NaN
    注意:要想保留所有的index,则需要使用.add()函数

 Series的运算

   1.可以进行加减乘除    (直接利用加减乘除符号进行运算时,Nan是不会进行加减乘除的)

print(s1 + 10) """ 金 11.0 木 36.0 水 NaN 火 NaN Name: 元素, dtype: float64 """

2.  使用add()方法,参数fill_value,    如果在进行加减乘除运算的时候,有NaN的值,

    那么fill_value默认会将NaN设置为= 后面的值

print(s1.add(10,fill_value=0)) # fill_value=0把NaN设置为0 """ 金 11.0 木 36.0 水 10.0 火 10.0 Name: 元素, dtype: float64 """

 3.Series之间进行运算

   ---  在运算中自动对齐不同索引的数据        Series最重要的特征是有索引值

   --- 如果索引对应,,在进行相加时,索引相同进行相加
   ---  如果索引不对应,则补NaN
                             注意:要想保留所有的index,则需要使用.add()函数

from pandas import Series s1 = Series([2, 4, 7, 9], index=[0, 1, 2, 3]) s2 = Series([1, 2, 3, 4], index=[2, 3, 4, 5]) # 索引不对应 print(s1 + s2) """ 0 NaN 1 NaN 2 8.0 3 11.0 4 NaN 5 NaN dtype: float64 """ # 保留所有的引用,即连个索引取并集 # fill_value: 有空即填充等号后面的值 print(s1.add(s2,fill_value=0)) """ 0 2.0 1 4.0 2 8.0 3 11.0 4 3.0 5 4.0 dtype: float64 """

Series数据有空值(None)时,是可以的进行相加的