Pandas之Series


Series是指一个类似于数组、列表或列变量的一维对象。

Series中每个条目都会被分配一个标签索引。默认情况下,每个条目都会收到一个从0到N之间的索引标签,其中N等于Series的长度减一。

Series可以理解为一个一维的数组,只是index可以自己改动。创建的方法统一为pd.Series(data,index=)。打印的时候按照index赋值的顺序,有的时候会看着很别扭。某个index对应的值为空就用NaN。

index参数默认从0开始的整数,也是Series的绝对位置,即使index被赋值之后,绝对位置不会被覆盖。

Series可以通过三种形式创建:python的dict、numpy当中的ndarray(numpy中的基本数据结构)、具体某个数值。index赋值必须是list类型。

Seriers的交互式显示的字符串表示形式是索引在左边,值在右边。【因为我们没有给数据指定索引,一个包含整数0到N-1(这里N是数据的长度)的默认索引被创建】。 你可以分别的通过它的values和index属性来获取Series的数组表示和索引对象。

  1. [ ] 简而言之,Seriers是一个用values表示数值,index表示索引的一维数据结构。

序列的创建主要有三种方式:

1)通过一维数组创建序列

Series 是一个值的序列,它只有一个列,以及索引。下面的例子中,就用默认的整数索引

import numpy as np, pandas as pd
arr1 = np.arange(10)
print(arr1)
type(arr1)

s1 = pd.Series(arr1)
print('\n')
print(s1)

type(s1)

输出:

[0 1 2 3 4 5 6 7 8 9]


0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64
Out[8]:
pandas.core.series.Series

如果要手动赋值index的话,index赋值必须是list类型

t = pd.Series(np.random.randn(5), index = list('ABCDE'))
print(t)

输出:

A    1.057772
B    0.062996
C    0.325803
D   -0.141765
E    0.140319
dtype: float64

注意:创建Series的时候要注意创建行数和索引数量匹配的问题,如果默认的话会自动匹配创建的行数,但是values和index在不匹配的情况根据不同的情况,pandas做不同的处理。

下述创建报错:原因是values和index不匹配,在以及固定了values和index的情况加,pandas无法通过自动调整来进行匹配

s=pd.Series([5,4],index=list('abcd'))
print(s)

输出:

~/local/anaconda3/lib/python3.6/site-packages/pandas/core/internals.py in __init__
(self, values, placement, ndim, fastpath)
    113             raise ValueError('Wrong number of items passed %d, placement '
    114                              'implies %d' % (len(self.values),
--> 115                                              len(self.mgr_locs)))
    116 
    117     @property

ValueError: Wrong number of items passed 2, placement implies 4

如果将上述创建调整,通过:

s=pd.Series([5,4],index=list('ab'))
print(s)

输出如下:

a    5
b    4
dtype: int64

下述创建pandas会自动调整,不会报错:

t=pd.Series(5,index=list('abcd'))
print(t)

t=pd.Series(5,index=list('ab'))
print('\n')
print(t)

输出:

a    5
b    5
c    5
d    5
dtype: int64

a    5
b    5
dtype: int64

像这种保证每行数据精准性的话很麻烦,并且用起来会不小心把其他数据覆盖掉,因此建议少用,除非明确知道values和index的对应情况,否则易导致程序出错。

2)通过字典的方式创建序列

Series可以直接转换词典格式的数据,其中词典的键值对应Series中的索引值。

dic1 = {'a':10,'b':20,'c':30,'d':40,'e':50}
type(dic1)

s2 = pd.Series(dic1)
print(s2)
type(s2)

#覆盖字典的键值,如果键对应的值是空的话,则用NaN来填充。
s= pd.Series({'a':1,'b':2,'d':3},index = ['a','d','c','b'])
print(s)

输出:

a    10
b    20
c    30
d    40
e    50
dtype: int64

a    1.0
d    3.0
c    NaN
b    2.0
dtype: float64
3)通过DataFrame中的某一行或某一列创建序列

这部分内容我们放在后面讲,因为下面就开始将DataFrame的创建。

思考问题:Series的键值是否可以重复?

t = pd.Series(np.random.randn(6), index = list('AABCDE'))
print(t)

输出如下:

A    0.300580
A    2.159469
B    0.138579
C   -1.696126
D    0.574021
E   -0.400556
dtype: float64

上述的实验是正确的,也就表明Series的index是可以相同的,这和java、C等语言结构中key的概念是不一样的。

results matching ""

    No results matching ""