pandas之Series

 

Pandas

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

​ ———— 百度百科


import numpy as np
import pandas as pd
from pandas import Series,DataFrame
#Series:专门处理一维数据的,
#DataFrame:专门处理二维数据的
import matplotlib.pyplot as plt
%matplotlib inline

Series


Series -- 专门处理一维的数组
Series是一种类似与一维数组的对象,由下面两个部分组成:
values:一组数据(ndarray类型)
index:相关的数据索引标签
1、series的创建

# Series有两种创建方式:
1由列表或numpy数组创建
s1 = Series([1,2,3]) # 由列表创作
   s2 = Series(np.array([1,2,3]))   # 由numpy数组创作
   type(s1) ----> pandas.core.series.Series
   # 可以通过index参数自定义索引,例:
   s3 = Series(np.array([1,2,3]),index = list("abc"))  # s3的索引为abc
   # 这种创建方法,索引(index)和value值必须一一对应,不能多也不能少
   # 修改索引的时候不能单个修改,索引值必须全部写出来,不修改的写原来的值
   # 特别地,由ndarray创建的是引用,而不是副本。对Series元素的改变也会改变原来的ndarray对象中的元素。(列表没有这种情况)
2由字典创建
s = Series(data = {"a":10,"pi":3.14,"e":2.713,"g":0.618}, index = ["a","pi","e","g","kk"])
   # index -- 指定索引 (如果不写index,索引默认以英文字母首字母排序)
# 使用ndarray和list 的时候注意索引是一对一的
# 使用字典创建Series的时候,索引指定的可以少也可以多
# 多的一种情况补上NaN(空值),少的不显示
2、series的索引和切片

s = Series(data = {"a":10,"pi":3.14,"e":2.713,"g":0.618}, index = ["a","pi","e","g","kk"])
# 索引
可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的仍然是一个Series类型)。分为显示索引和隐式索引:
1显示索引:
1. 使用index中的元素作为索引值
2. 使用.loc[](推荐)
   s["e"] s.loc["e"]           -- 取一个值时,返回的是元素的类型
   s[["a","e"]] s.loc["a","e"] -- 取多个值时,返回的是Series类型
   # 取多个值时,必须使用两个中括号
2隐式索引:
1. 使用整数作为索引值
2. 使用.iloc[](推荐)
   s[0] s.iloc[1]         -- 取一个值时,返回的是元素的类型
   s[[0,2]] s.iloc[[0,2]] -- 取多个值时,返回的是Series类型
   # 取多个值时,必须使用两个中括号
   # 隐式索引 传入的是默认的索引值,为int类型(从0开始)
# 切片
s["a":"g"] s.loc["a":"g"] -- 显示索引切片时,区间是闭区间(左闭右闭)
s[0:2] s.iloc[0:2]        -- 隐式索引 切片时 区间是左闭右开的
3、series的基本概念及属性

可以把Series看成一个定长的有序字典
可以通过shape,size,index,values等得到series的属性
s.shape -- s的形状
s.size -- s的长度
s.index -- s的索引
s.values -- s的值
可以通过head(),tail()快速查看Series对象的样式
data = pd.read_csv("../../../day03/2-pandas/softpo/president_heights.csv")
read_csv -- 可以读取csv、Excel等文件
   # data 为DataFrame对象
data.head() -- # 查看csv表格的头部, 默认为前5行
data.tail() -- # 查看csv表格的尾部, 默认为后5行
# 可以通过参数 n 来修改默认行数
# Series 也有此属性,   如:
s_name = data["name"]
s_name.tail()

# 当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况
s = Series({"a":1,"b":2,"c":3},index=["a","b","c","d"])
# 可以使用pd.isnull(),pd.notnull(),或自带isnull(),notnull()函数检测缺失数据
pd.isnull(s)
# 返回值:有空值的返回True, 否则返回False
s.isnull()
# 返回值同上,自带的方法
pd.notnull(s)
# 返回值: 有空值的返回False, 否则返回True
# 自带的方法(s.notnull())返回值相同
# 用法:
ind = pd.notnull(s)
s[ind]
# 通过notnull方法获取boolean值,把它作为一个检索,取出所有为True的数据,就会得到所有数值不为空的数据(即排空)
# 也可以通过isnull方法,取出所有为空的数据,然后进行赋值

# Series对象本身及其实例都有一个name属性
设置name属性有两种方法:
1s = Series(data= np.random.randint(0,10,size=5),index=["a","b","c","d","e"],name="python")
2s = Series(data= np.random.randint(0,10,size=5),index=["a","b","c","d","e"])
s.name = "python"
4、series的运算

1适用于numpy的数组运算也适用于Series 例:
s+10
s.add(2)
2Series之间的运算
1. 在运算中自动对齐不同索引的数据
2. 如果索引不对应,则补NaN
s = Series(data= np.random.randint(0,10,size=5),index=["a","b","c","d","e"])
a = Series(data = np.random.randint(0,20, size=3),index=["A","B","c"])
s + a -- 索引不对应,得到以下值:
     A    NaN
     B    NaN
     a    NaN
     b    NaN
     c    7.0
     d    NaN
     e    NaN
 dtype: float64
   # 注意:要想保留所有的index,则需要使用.add()函数
   s.add(a,fill_value = 0) -- fill_value:填充(将为空的值,填充为0)