Pandas模块作为数据分析的首选库,它含有更快更简单的高级数据结构和操作工具,本期主要介绍pandas模块下的Series结构,Series的字符串表现形式为:索引在左边,值在右边。当其没有指定索引时,会自动创建一个0到N(N为数据的长度)的整数型索引。
一、创建Series
Series的创建主要有三种方式,示例如下:
In [1]:importnumpyasnp
In [2]:importpandasaspd
#通过列表创建Series
In [3]:obj1=pd.Series([3,6,-5,9])
In [4]:obj1
Out[4]:
0 3
1 6
2-5
3 9
dtype:int64
#通过字典创建Series
In [5]:dic={'name':'xiaozhang','age':18,'marriage':'单身','address':'浙江杭州'}
In [6]:obj2=pd.Series(dic)
In [7]:obj2
Out[7]:
address浙江杭州
age18
marriage单身
name xiaozhang
dtype:object
#通过一维数组创建Series
In [8]:arr=np.array((2,5,,7))#创建一维数组
In [9]:arr
Out[9]:array([2,5,,7])
In [10]:obj3=pd.Series(arr)
In [11]:obj3
Out[11]:
0 2
1 5
2 0
3 7
dtype:int32
二、Series属性以及修改
1、对于创建好的Series,通过Series的values和index属性获取数组值和索引对象。
In [1]:importpandasaspd
#创建Series
In [2]:obj=pd.Series([4,7,-5,3],index=['a','b','c','d'])
In [3]:obj
Out[3]:
a4
b7
c-5
d3
dtype:int64
#获取Series的值
In [4]:obj.values
Out[4]:array([4,7,-5,3],dtype=int64)
#获取Series的索引
In [5]:obj.index
Out[5]:Index(['a','b','c','d'],dtype='object')
2、Series属性的修改,主要是index和values的修改。
In [1]:importpandasaspd
#创建Series
In [2]:obj=pd.Series([10,20,30,40],index=['a','b','c','d'])
In [3]:obj
Out[3]:
a10
b20
c30
d40
dtype:int64
# 通过赋值的方式修改values
In [4]:obj['a']=8
In [5]:obj
Out[5]:
a8
b20
c30
d40
dtype:int64
In [6]:obj[1:3]=[16,25]
In [7]:obj
Out[7]:
a8
b16
c25
d40
dtype:int64
#通过赋值的方式修改index
In [8]:obj.index=['Bob','Mary','Jack','David']
In [9]:obj
Out[9]:
Bob8
Mary16
Jack25
David40
dtype:int64
三、查询Series数据
In [1]:importpandasaspd
#创建Series
In [2]:obj=pd.Series(pd.Series([2,4,6,8],index=['a','b','c','d']))
In [3]:obj
Out[3]:
a2
b4
c6
d8
dtype:int64
#通过索引查询单值
In [4]:obj['a']
Out[4]:2
#通过索引序列查询多值
In [5]:obj[['a','b']]
Out[5]:
a2
b4
dtype:int64
#通过布尔类型索引筛选
In [6]:obj[obj>2]#筛选大于2的值
Out[6]:
b4
c6
d8
dtype:int64
#通过位置切片和标签切片查询数据
In [7]:obj[:2]#查询前2个元素
Out[7]:
a2
b4
dtype:int64
In [8]:obj['b':'c']
Out[8]:
b4
c6
dtype:int64
四、Series函数的应用
这部分主要讲一下Series中常用的几个函数,比如:唯一值unique、值计数value_counts、排序sort_index和sort_values、抽样sample等函数。
1、对于离散型变量的序列,我们更想知道该序列中有哪些取值以及各个取值频数的统计。
In [1]:importnumpyasnp
In [2]:importpandasaspd
#创建Series
In [3]:obj=pd.Series(['a','c','a','b','b','a','a','b'])
#唯一值
In [4]:obj.unique()
Out[4]:array(['a','c','b'],dtype=object)
#频数的统计
In [5]:obj.value_counts()
Out[5]:
a4
b3
c1
dtype:int64
2、排序函数sort_index和sort_values
In [1]:importnumpyasnp
In [2]:importpandasaspd
#创建Series
In [3]:obj=pd.Series(np.random.normal(size=4))
In [4]:obj
Out[4]:
-0.507302
1-0.185045
2-0.876905
3 0.898253
dtype:float64
#按Series的索引排序
In [5]:obj.sort_index(ascending=False)#降序排序
Out[5]:
3 0.898253
2-0.876905
1-0.185045
-0.507302
dtype:float64
#按Series的值排序
In [6]:obj.sort_values()
Out[6]:
2-0.876905
-0.507302
1-0.185045
3 0.898253
dtype:float64
3、抽样是数据分析中常用的方法,通过抽样将样本拆分成训练集和测试集,pandas模块提供了sample函数来完成抽样。
Series.sample(n=None,frac=None,replace=False,weights=None,random_state=None,axis=None)
n:指定抽取的样本量;
frac:指定抽取的样本比例;
replace:是否有放回抽样,默认无放回;
weights:指定样本抽中的概率,默认等概论抽样;
random_state:指定抽样的随机种子。
示例如下:
In [1]:importpandasaspd
#从100个人中抽取3位幸运观众
In [2]:obj1=pd.Series(range(1,101))
In [3]:obj1.sample(n=3,random_state=2)
Out[3]:
83 84
30 31
56 57
dtype:int32
#从1-6中有放回抽取3个数
In [4]:obj2=pd.Series(range(1,7))
In [5]:obj2.sample(n=3,replace=True,random_state=2)
Out[5]:
0 1
5 6
0 1
dtype:int32
五、Series统计分析
Pandas模块为我们提供非常多的描述性统计分析函数:最大值、最小值、均值、分位数、方差、标准差等。
In [1]:importpandasaspd
#创建Series
In [2]:obj=pd.Series(range(1,50))
In [3]:obj.count()#非空元素的个数
Out[3]:49
In [4]:obj.min()#最小值
Out[4]:1
In [5]:obj.max()#最大值
Out[5]:49
In [6]:obj.quantile(0.25)# 25%分位数
Out[6]:13.0
In [7]:obj.quantile(0.90)# 90%分位数
Out[7]:44.2
In [8]:obj.sum()#求和
Out[8]:1225
In [9]:obj.mean()#均值
Out[9]:25.0
In [10]:obj.median()#中位数
Out[10]:25.0
In [11]:obj.var()#方差
Out[11]:204.16666666666666
In [12]:obj.std()#标准差
Out[12]:14.288690166235206
In [13]:obj.describe()#一次输出多个描述性统计指标
Out[13]:
count49.00000
mean25.00000
std14.28869
min1.00000
25%13.00000
50%25.00000
75%37.00000
max49.00000
dtype:float64
特别注意的是,describe函数只针对Series和DataFrame结构。
此次Pandas模块中的Series结构就介绍到这,下期将分享该模块下的DataFrame结构。
学习与分享,关注小号
领取专属 10元无门槛券
私享最新 技术干货