Series对比numpy,它更像是字典属性的数据结构,每一行都有各自的key。
Series快速初始化
import pandas as pd
#创建4行的Series,每一行是一个数字,默认索引是0~3
pd.Series([1,2,3,4]) >>> 0 1
1 2
2 3
3 4
#创建2行的Series,每一行是一个列表
pd.Series([[1,2,3,4],[5,5,5,5]]) >>> 0 [1, 2, 3, 4]
1 [5, 5, 5, 5]
#从字典创建Series
pd.Series({"a":1,"b":2,"c":3,"d":4})
>>> a 1
b 2
c 3
d 4
#从numpy创建Series
pd.Series(np.arrange(4))
>>> 0 1
1 2
2 3
3 4
#指定index
pd.Series([1,2,3,4],index=['a','b','c','d'])
>>> a 1
b 2
c 3
d 4
Series运算
a=pd.Series([1,2,3,4],index=['a','b','c','d'])
#a每一行加上2
a+2 >>> a 3
b 4
c 5
d 6
#两个Series相加,会让每个元素对应相加,值得注意的是,会匹配按照index相同的行进行相加
b=pd.Series([1,2,3,4],index=['b','a','c','d'])
a+b >>> a 3
b 3
c 6
d 8
#如果两个Series相加,有index不同的地方,默认会以nan替代,并且取两个Series的并集
c=pd.Series([1,2,3,4],index=['a','b','c','e'])
a+c >>> a 2.0
b 4.0
c 6.0
d NaN
e NaN
#nan的值以0替代
a.add(c,fill_value=0) >>> a 2.0
b 4.0
c 6.0
d 0
e 0
#比较运算
a>3 >>> a False
b False
c False
d True
Series索引
a=pd.Series([1,2,3,4],index=['a','b','c','d'])
#下标索引
a[0] >>> 1
#index索引
a['a'] >>> 1
#切片索引
a[0:2] >>> a 1
b 2
#布尔索引
a<3 >>> a True
b True
c False
d False
#选取小于3的行
a[a<3] >>> a 1
b 2
#选取小于3并且为偶数的行
a[(a<3) & (a%2==0)] >>> b 2
#花式索引
a[['a','b','d']] >>> a 1
b 2
d 4
a['a':'c'] >>> a 1
b 2
c 3
#需要注意的是如果Series的索引是整数的时候,传入a[i],默认是会以键的方式进行索引,而不是下标,如
a=pd.Series(np.arange(10))[5:] >>> 5 5
6 6
7 7
8 8
9 9
#a[5]默认是以键的方式索引
a[5] >>> 5
#a[4]由于不存在键,会抛出异常
a[4] >>> KeyError
#这种情况如果要以下标索引,可使用iloc
a.iloc[0] >>> 5
Series遍历
a=pd.Series([1,2,3,4],index=['a','b','c','d'])
#遍历值
for i in a:
print(i)
>>> 1
2
3
4
#遍历键
for i in a.index:
print(i)
>>> a
b
c
d
Series缺失值处理
a=pd.Series([np.nan,2,3,4],index=['a','b','c','d'])
#判断每一行是否为nan
a.isnull() >>> a True
b False
c False
d False
#丢弃nan的行
a.dropna() >>> b 2.0
c 3.0
d 4.0
#填充nan的值为平均数
a.fillna(a.mean()) >>> a 3.0
b 2.0
c 3.0
d 4.0