series是pandas里一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象
pandas中的series有一点点像list,但这样说只是为了让你很容易接受这种数据结构。他们之间有一点非常大的不同,list可以存储任何类型的数据,但是series只能存储一种类型的数据,但这也让它对内存的利用更加高效。
下面的代码根据一个list创建一个series,通过对创建出来的series进行观察,我们将对series建立一个基础的理解
from pandas import Series
lst = ['python', 'c++', 'c#', 'java']
ser = Series(lst)
print(ser)
程序输出结果为:
0 python
1 c++
2 c#
3 java
dtype: object
对ser对象进行分析,我们不难得出出以下几个结论
series 里有索引这种东西,那么我们就探索一下, 看看在创建series时能否指定索引
from pandas import Series
lst = ['python', 'c++', 'c#', 'java']
ser = Series(lst, index=['a', 'b', 'c', 'd'])
print(ser)
程序输出
a python
b c++
c c#
d java
dtype: object
由上面的结果可知,series的索引是可以指定的,说道这里,就要思考一下series和list的相似与不同之处了
从这两点上来看,series更加灵活,毕竟它可以指定索引,这样,再访问起来时就更方便了。
看上去,series有一点像list,但是索引更加灵活,但这样,就又有点像dict了,下面讨论一下series和dict的相似与不同
先来看看如何基于dict创建一个series
from pandas import Series
score_dict = {
'python': 100,
'c++': 99,
'c#': 98,
'java': 97
}
ser = Series(score_dict)
print(ser)
程序输出结果
python 100
c++ 99
c# 98
java 97
dtype: int64
从结果上看,字典的key自动转化为了series的索引,字典的value部分自动转化为了series的存储数据,接下来看看如何用索引操作series
print(ser['c++'])
ser['java'] = 100
print(ser)
程序输出结果
99
python 100
c++ 99
c# 98
java 100
dtype: int64
和字典一样,可以通过索引进行访问,修改,如果是这样,series似乎和字典没有什么区别了,但其实不然,series本质上是一个一维数组类型的数据,因此,即便是基于dict创建的series,也仍然可以使用那些数组才有的操作方法,例如切片操作
from pandas import Series
score_dict = {
'c++': 99,
'python': 100,
'c#': 98,
'java': 97
}
ser = Series(score_dict)
print(ser.index)
print(ser[0])
print(ser[1:])
程序输出结果为
Index(['c++', 'python', 'c#', 'java'], dtype='object')
99
python 100
c# 98
java 97
dtype: int64
基于dict创建的series,虽然根据字典的key生成了索引,但是仍然可以像访问list那样利用数组下标去访问,而且支持切片操作,这种能力就是字典所不具备的
前面提供了基于list和dict创建series的示例,那么反过来,也一定可以从series中转换出list和dict,下面是一段示例代码
from pandas import Series
score_dict = {
'c++': 99,
'python': 100,
'c#': 98,
'java': 97
}
ser = Series(score_dict)
print(ser.tolist())
print(ser.to_dict())
程序输出结果
[99, 100, 98, 97]
{'c++': 99, 'python': 100, 'c#': 98, 'java': 97}
from pandas import Series
score_dict = {
'c++': 99,
'python': 100,
'c#': 98,
'java': 97
}
ser = Series(score_dict)
ser.to_excel('data.xls')
数据最终保存在了data.xls文件中
说其特殊,都是相比于list,dict这种原生类型数据而言的
from pandas import Series
score_dict_1 = {
'c++': 99,
'python': 100,
'c#': 98,
'go': 97
}
score_dict_2 = {
'node.js': 99,
'python': 100,
'c#': 98,
'java': 97
}
ser_1 = Series(score_dict_1)
ser_2 = Series(score_dict_2)
res = ser_1 + ser_2
print(res)
对两个series进行相加操作,则会根据索引进行相加,如果一方没有某个索引,则值为NaN
输出结果为
c# 196.0
c++ NaN
go NaN
java NaN
node.js NaN
python 200.0
dtype: float64
series对象有一个name属性,其索引也有name属性,这样可以更好的标识数据特征
from pandas import Series
score_dict = {
'c++': 99,
'python': 100,
'c#': 98,
'go': 97
}
ser = Series(score_dict)
ser.name = 'score'
ser.index.name = 'program'
print(ser)
程序输出结果
program
c++ 99
python 100
c# 98
go 97
Name: score, dtype: int64
还有很多其他功能,不一一列举,你可以通过官方文档查看。
QQ交流群: 211426309