回顾

在数据处理进阶pandas入门(二)中,我们介绍了pandas中Series常用的几种创建方法以及Series关于索引和切片的知识点。今天我们来看一下Series的基本技巧功能。

通过head()和tail()查看Series数据

当Series数据较多,且我们只需要查看前几个或后几个元素时,打印整个Series就会显得特别臃肿,这时我们可以使用head()函数和tail()函数分别查看前几个元素和最后几个元素。基本用法如下。

import numpy as npimport pandas as pdarr = np.random.rand(100)series = pd.Series(arr)# 默认为5print(series.head())print("---------------")print(series.head(2))print("---------------")print(series.tail())print("---------------")print(series.tail(3))

head()函数和tail()函数默认会取5个元素,当想查看指定个数的元素时,只需要将个数值传入即可。运行结果如下所示。




SERIES函数怎么用 series函数的使用步骤_SERIES函数怎么用

查看数据



使用reindex()函数重新索引

这里的重新索引并不是重新设置索引,而是从源Series中获取索引所对应的数据,若源Series中没有相关索引,会使用缺失值NaN填充,我们看一下效果。

import numpy as npimport pandas as pdarr = np.random.rand(5)series1 = pd.Series(arr, index=list('abcde'))print(series1)print("---------------")# 根据索引取值,若无对应值默认会有缺失值NaNseries2 = series1.reindex(list('bcdef'))print(series1)print("---------------")print(series2)

上述代码我们创建了一个索引为“abcde”的Series,然后通过reindex()函数重新索引为“bcdef”,reindex()函数只是生成一个新的Series,并不改变源Series。运行结果如下所示,我们可以看到, 对于源Series(series1)中有的索引“bcde”,新生成的Series(series2)会将数据取出来,而对于series1中没有的索引“e”,series2会以缺失值NaN填充。




SERIES函数怎么用 series函数的使用步骤_bc_02

重新索引



有时我们不想让缺失值NaN出现,可以传入fill_value参数给缺失的索引设置一个默认填充值。

import numpy as npimport pandas as pdarr = np.random.rand(5)series1 = pd.Series(arr, index=list('abcde'))print(series1)print("---------------")# 根据索引取值,若无对应值默认会有缺失值NaNseries2 = series1.reindex(list('bcdef'), fill_value=0)print(series2)

运行后可以发现, 在缺失的索引位置上,值变成了我们设置的默认填充值。




SERIES函数怎么用 series函数的使用步骤_pandas series 相加_03

修改默认索引



Series的自动对齐特性

当多个Series进行运算时,Series会根据索引值自动对齐,对共有的索引对应值进行相关运算,不共有的索引对应值则分别以缺失值NaN填充。

import numpy as npimport pandas as pdseries1 = pd.Series(np.random.rand(3), index=list('abc'))print(series1)print("---------------")series2 = pd.Series(np.random.rand(4), index=list('bcde'))print(series2)print("---------------")print(series1 + series2)

运行结果如下。对于共有索引“bc”,对应值会进行相加,而对于非共有索引“ade”,对应的值为NaN。




SERIES函数怎么用 series函数的使用步骤_pandas series 相加_04

自动对齐



对于缺失值的处理这里暂时不做展开,后面会单独详细介绍。

Series删除元素函数drop()

pandas中,我们使用drop()函数来删除Series中的元素,传入要删除的索引标签或索引标签序列可以删除一个或多个元素。

import numpy as npimport pandas as pdseries = pd.Series(np.random.rand(5), index=list('abcde'))print(series)print("---------------")series1 = series.drop(labels='a')series2 = series.drop(labels=['b', 'c'])print(series)print("---------------")print(series1)print("---------------")print(series2)

上述代码中drop()函数传入的参数也可以是index='a',index=['b', 'c'],运行结果如下所示。 需要特别注意的是,Series不支持传下标来进行删除元素,上述代码中若使用drop(index=0)就会报错,无法成功删除第一个元素。




SERIES函数怎么用 series函数的使用步骤_SERIES函数怎么用_05

drop()函数



与reindex()函数一样,drop()函数也只是生成新的Series,而不会改变源Series。但有时我们就是想删除源Series的元素,这个时候可以设置参数inplace,该参数默认情况下为False,即不改变源Series,当我们将inplace设置成True时,源Series就改变了,但请注意,此时它将不再生成新Series。

import numpy as npimport pandas as pdseries = pd.Series(np.random.rand(5), index=list('abcde'))print(series)print("---------------")series2 = series.drop('a', inplace=True)print(series2)print("---------------")print(series)

运行结果如下所示。可以看到,当设置inplace=True时,源Series成功得到了改变,但用于接收的series2为None,可见没有生成新的Series。




SERIES函数怎么用 series函数的使用步骤_pandas series 相加_06

设置inplace=True



除此之外,pandas中还有用于删除空值或缺失值的dropna()函数和用于删除重复值的drop_duplicates()函数,其中,dropna()函数常常被用于处理缺失值。两个函数的基本用法如下。

import numpy as npimport pandas as pdarr = np.array([1, 2, 1, 3, None, 2, 4, 5, None, 1, 2, 3])series = pd.Series(arr)print(series)print("---------------")series.dropna(inplace=True)print(series)print("---------------")series.drop_duplicates(inplace=True)print(series)

我们创建一个既有重复值又有空值的Series,然后分别使用dropna()函数和drop_duplicates()函数分别删除空值和重复值,为了便于比较,我们设置inplace=True,直接在源Series上修改。运行结果如下所示。




SERIES函数怎么用 series函数的使用步骤_pandas 中文打印无法对齐_07

dropna()和drop_duplicates()



Series添加元素

给Series添加元素可以通过直接添加元素和使用append()函数连接Series的方式,基本使用方法如下。

import numpy as npimport pandas as pdseries1 = pd.Series(np.random.rand(5))series2 = pd.Series(np.random.rand(5), index=list('abcde'))print(series1)print("---------------")print(series2)print("---------------")series1[5] = 1 series2['f'] = 2series2[5] = 2series1 = pd.Series(np.array([1, 2, 3, 4, 5]), index=list('abcde'))series2 = pd.Series(np.array([2, 3, 4, 5, 6]), index=list('bcdef'))print(series1)print("---------------")print(series2)print("---------------")series3 = series1.append(series2)print(series3)

不同于drop()函数无法使用下标索引,添加元素除了使用标签索引外,使用下标索引的方式也是可以直接给Series添加对应元素的。append()函数连接两个Series,生成的新Series将忽视标签的重复,包含源Series中的所有元素。运行结果如下所示。




SERIES函数怎么用 series函数的使用步骤_pandas series 相加_08

添加元素



Series元素排序

pandas中可以使用sort_index()函数或sort_values()函数分别对Series的索引及元素值进行排序,ascending参数用于设置正序或倒序,默认为True正序,设置ascending为False时倒序排序。

import numpy as npimport pandas as pdseries = pd.Series(np.random.randn(5), index=list('bdeac'))print(series)print("---------------")print(series.sort_index())print("---------------")print(series.sort_index(ascending=False))print("---------------")print(series.sort_values())print("---------------")series.sort_values(ascending=False, inplace=True)print(series)

运行结果如下所示。同样地,sort_index()函数和sort_values()函数只是生成新的Series,而不影响源Series,要修改源Series,需要设置inplace=True。




SERIES函数怎么用 series函数的使用步骤_SERIES函数怎么用_09

排序



总结

以上介绍了pandas中Series的基本技巧功能,包括对元素的查看、添加、删除、排序等。感谢大家的关注,欢迎批评指正,一起交流~