Series 是pandas两大数据结构中(DataFrame,Series)的一种,我们先从Series的定义说起,Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。
Series对象本质上是一个NumPy的数组,因此NumPy的数组处理函数可以直接对Series进行处理。但是Series除了可以使用位置作为下标存取元素之外,还可以使用标签下标存取元素,这一点和字典相似,每个Series对象都由两个数组组成: 1) index: 它是从NumPy数组继承的Index对象,保存标签信息。 2) values: 保存值的NumPy数组。
了解Series的这种数据结构,对于接下来使用Series至关重要。
2灵活使用Series
这部分的总结思路如下:
2.1 创建Series
创建Series,直接调用Series的构造函数,如下:
#只指定values s1 = pd.Series( [3,5,7]) #还指定index s2 = pd.Series( [3,5,7], index = list('ABC') ) #再指定name s3 = pd.Series( [3,5,7], index = list('ABC'),name='s3' ) #指定name的作用:append到pd中的行索引标签
mix = pd.Series( [3, '5', 7.0] ) # 此时的mix的类型为object,而不是像上面的int64
2.2 Series索引
创建Series时,如果不指定index,默认索引从0开始。如果创建完Series后,想修改索引,可以这样:
s1.index = ['a', 'b', 'c']
这样,s1的索引变为从'a'开始。
2.3 Series增删改查
2.3.1增加
Series的增加有两个类似的API,但是不要混淆了啊,一个是add,它的效果是元素对应相加,另一个是append,才是将元素拼接到原series后。
s3.add(s2)
元素的个数还是3个,只不过元素大小变为[6,10,14],注意如果索引不相同的add,会增加元素个数,但是所有元素都变为Nan
那append的呢?
s3.append(s2) #元素个数变为6个,并且索引可以允许重复,记住pandas中是允许出现重复的索引标签的。
2.3.2 删除
如何删除series的一个元素呢,调用drop,接口中传入一个索引标签。
s3.drop('A')
删除后如果再想恢复怎么办呢?因为series的index是一个list,所以先添加一个pd.Index()实例,然后再充填上值就行:
s3.index.append(pd.Index(['A']) )
2.3.3 修改
想修改某个元素,直接找到对应的标签(按照字典的方式),或找到对应的values的索引,
s3['B'] = 6
或者,
s3[1] = 6
2.3.4 查找
查找某个元素,可以通过标签或索引,见如上的修改方法,不再详述。
3DataFrame
DataFrame是pandas的两个重要数据结构的另一个,可以看做是Series的容器,看早一个DataFrame实例的方法也很简单:
pd_data = pd.DataFrame([ [9,0,1],[7,3,10] ] )
这种方法默认下行索引标签和列索引标签都是从0开始。注意这是DataFrame的重要特性之一,同时具有行列标签,如果Series是一维的数组,那么作为其容器的DataFrame自然是二维的数组,其中行的axis=0, 列的axis=1.
既然DataFrame和Series如此紧密,那么它们之间又是如何通信的呢? 下面看下如何将一个Series转载到一个DataFrame的实例中。
3.1 装载Series
先看一个没达到预期的装载,我们想把s3装载到pd_data中,调用append,API调对了,但是错误的是它们的索引不对应,所以:
pd_data.append(s3)
因此,以上的DataFrame实例pd_data,修改其columns与s3对应,
pd_data.columns = list('ABC') pd_data.append(s3)
插播:
以上,pandas的两种最重要的数据结构,弄明白了其原理,用起来便能顺手些,如有疏漏或错误,请指针。
更多文章:
NLP入门:CNN,RNN应用文本分类,个性化搜索,苹果和乔布斯关系抽取(2)
深度学习|大师之作,必是精品
算法channel关键词和文章索引
算法优化|说说哨兵(sentinel value)