本文主要介绍Series结构数据的基本操作,包括以下几个方面:
- 数据查看
- 重新索引
- 数据对齐
- 数据增删改
数据查看
.head()方法和.tail()方法可以默认查看Series中的前、后5组数据,括号内也可以指定具体数据量。
s = pd.Series(np.random.rand(50))
print(s.head())
print("-"*10)
print(s.tail())
=========================
0 0.220782
1 0.983910
2 0.865307
3 0.091070
4 0.120625
dtype: float64
----------
45 0.707706
46 0.407068
47 0.011391
48 0.413022
49 0.202933
dtype: float64
重新索引
.reindex将会根据索引重新排序,如果当前索引不存在,则引入缺失值。
s = pd.Series(np.random.rand(3),index = ['a','b','c'])
print(s)
print('-'*10)
s1 = s.reindex(['c','b','a','d'])
print(s1)
=================================
a 0.515032
b 0.500950
c 0.572870
dtype: float64
----------
c 0.572870
b 0.500950
a 0.515032
d NaN
dtype: float64
从结果中可以看出,经过reindex操作,改变了索引顺序,但是原索引和值的对应关系在新的数据结构中保持不变,而新索引‘d’对应的值以缺失值代替。
当然,也可以在reindex方法中指定缺失值的填充值。
s2 = s.reindex(['c','b','a','d'], fill_value = 0)
print(s2)
===================
c 0.572870
b 0.500950
a 0.515032
d 0.000000
dtype: float64
数据对齐
Series数据结构的对齐的作用场景为两个Series数据进行运算,示例如下:
s1 = pd.Series(np.random.randint(10,size = 3),index = ['a','b','c'])
s2 = pd.Series(np.random.randint(10,size = 3),index = ['b','d','c'])
print(s1)
print(s2)
print(s1+s2)
==================
a 0
b 2
c 4
dtype: int32
b 6
d 9
c 5
dtype: int32
a NaN
b 8.0
c 9.0
d NaN
dtype: float64
从结果可以看出,Series的对齐操作是将两个Series结构数据中,索引值相同的数据进行运算,且不受顺序影响。如果两个Series数据中存在不同的索引,则用NaN作为最终结果。
数据增删改
数据的增加或修改,可以通过指定的下标索引或者标签对应的值完成,示例如下:
# 原始数据
s1 = pd.Series(np.random.rand(5))
s2 = pd.Series(np.random.rand(5), index = list('ngjur'))
print(s1)
print(s2)
# 指定数据
s1[5] = 100
s2['a'] = 100
print(s1)
print(s2)
============原始数据=============
0 0.578177
1 0.927243
2 0.345562
3 0.567035
4 0.216635
dtype: float64
n 0.873200
g 0.794130
j 0.016395
u 0.444403
r 0.002486
dtype: float64
============修改数据=============
0 0.578177
1 0.927243
2 0.345562
3 0.567035
4 0.216635
5 100.000000
dtype: float64
n 0.873200
g 0.794130
j 0.016395
u 0.444403
r 0.002486
a 100.000000
dtype: float64
也可以通过append方法,将两个Series数据合并起来,此方法不改变原数据
s3 = s1.append(s2)
print(s3)
print(s1)
================
0 0.578177
1 0.927243
2 0.345562
3 0.567035
4 0.216635
5 100.000000
n 0.873200
g 0.794130
j 0.016395
u 0.444403
r 0.002486
a 100.000000
dtype: float64
0 0.578177
1 0.927243
2 0.345562
3 0.567035
4 0.216635
5 100.000000
dtype: float64
Series数据的删除操作用drop()方法,通过指定标签来完成相应操作。同时,该方法中的inplace参数,默认为false,即返回的是结果副本,不改变源数据。
s.drop(labels=None,axis=0, index=None, columns=None, level=None, inplace=False,
errors='raise',)
s = pd.Series(np.random.rand(5), index = list('ngjur'))
print(s)
s1 = s.drop('n')
s2 = s.drop(['g','j'])
print(s1)
print(s2)
==================================
n 0.352701
g 0.227147
j 0.020439
u 0.018626
r 0.449618
dtype: float64
g 0.227147
j 0.020439
u 0.018626
r 0.449618
dtype: float64
n 0.352701
u 0.018626
r 0.449618
dtype: float64