2. Pandas的Series的创建
pandas的一维的数据结构Series有点像Python的列表
list
,可以存储一些数据,可以通过index访问Series里某位置上的数据,也可以通过标签label来访问某数据(这点有点类似于Python的字典
dict
)。 换句话说Series即可像list一样用index来标识Series里某数据,也可像dict那样通过标签来标识某数据。
2.1 创建Series的方法
在创建Series数据结构时首先要引入pandas。然后通过pandas的Series类的构造函数来创建Series对象,即数据。
- 不指定index创建series
import pandas as pd
a = pd.Series([2, 4, 5, 6])
print a
print a[0]
print a[1 : 3]
执行结果如下:
0 2
1 4
2 5
3 6
dtype: int64
2#a[0]
1 4#a[1 : 3]
2 5
dtype: int64
输出的第一列为index,第二列为数据value。这样创建series时没有指定index,pandas会采用整形数据作为该series的index。 从语句
print a[1 : 3]
可以看出series采用了整形位置信息的index,是可以使用Python里的索引
index
和切片
slice技术
。
- 在Series里指定index 用户可以在pandas的Series构造函数里使用index属性,为新建的Series数据指定标识的标签label。
import pandas as pd
s = pd.Series([2, 4, 5, 6], index=list("abcd"))
print s
print "s[b]->", s["b"]
print 's[0 : 3]\n', s[0 : 3]
print 's["a" : "c"]\n', s["a" : "c"]
程序执行结果:
a 2#print s
b 4
c 5
d 6
dtype: int64
s[b]-> 4
s[0 : 3]
a 2
b 4
c 5
dtype: int64
s["a" : "c"]
a 2
b 4
c 5
dtype: int64
- 通过字典构造 在Series构造函数里传入字典数据,即提供了数据又提供了index或者label。
import pandas as pd
s = pd.Series({"a" : 100, "b" : 200, "e" : 300})
print s
结果如下:
a 100# print s
b 200
e 300
dtype: int64
可以看出,字典的key作为Series的index或者label,而字典的value作为Series的value值。
2.2 常用创建Series的方法
上边给出里可以通过list、dict来创建Series等方法,但常用的方法还是list来提供数据和index、label比较好,原因是字典不能有重复的key而列表是允许有重复的。
import pandas as pd
s = pd.Series({"a" : 100, "b" : 200, "e" : 300})
print s
i = ["a", "c", "d", "a"]
v = [2, 4, 5, 7]
t = pd.Series(v, index=i, name = "col_name")
print t
程序执行结果:
a 100# print s
b 200
e 300
dtype: int64
a 2# print t
c 4
d 5
a 7
Name: col_name, dtype: int64
Series构造函数的name参数是给这列数据指定字段名。从结果可以看出t有两个名为’a’的label,值分别为2和7。
由于Series的label是允许重复的,上边的例子的t里的标签为’a’对应两条数据,但位置信息却不同。
import pandas as pd
s = pd.Series({"a" : 100, "b" : 200, "e" : 300})
print s
i = ["a", "c", "d", "a"]
v = [2, 4, 5, 7]
t = pd.Series(v, index=i, name = "col_name")
print t
print "t['a']\n", t["a"]
print 't[0]', t[0]
print 't[3]', t[3]
执行结果如下:
a 100# print s
b 200
e 300
dtype: int64
a 2# print t
c 4
d 5
a 7
Name: col_name, dtype: int64
t['a']
a 2
a 7
Name: col_name, dtype: int64
t[0] 2
t[3] 7
以上例子在创建Series尽管指定了index参数,实际pandas还是有隐藏的index位置信息的。所以Series有两套描述某条数据的手段:位置和标签。