这一次要和大家分享的是Pandas的基本功能。我们将了解与Series或DataFrame中数据交互的基础机制。
重建索引
reindex 是re-index 的合成,这样我们就可以很好地理解reindex这个方法的功能了!没错,就是创建一个符合新索引的新对象。我们用例子来说明这个方法。
In[1]:import pandas as pd
In[2]:s1= pd.Series([1,3,5,7],['d','b','a','c'])
In[3]:s1
out[3]:d 1
b 3
a 5
c 7
dtype: int64
现在我们调用reindex方法:
In[4]:s2 = s1.reindex(['a','b','c','d'])
In[5}:s2
out[5]: a 5
b 3
c 7
d 1
dtype: int64
如果我们在重建索引的过程中,引入了之前并不存在的索引,则会引入缺失值:
In[6]:s3 = s1.reindex(['a','b','c','d','e'])
In[7]:s3
out[7]:a 5.0
b 3.0
c 7.0
d 1.0
e NaN
dtype: float64
在s3重建索引的过程中,我们引入了之前没有的索引‘e’,我们可以看到,s3中引入了缺失值NaN.
对于一些顺序数据,例如时间序列数据,我们在重新构建顺序的时候,可能会需要进行插值或填充,那么我们怎么处理这样的问题呢?如果我们直接指定新的索引,然后对新的索引进行赋值,这样不失为一种解决办法。我们以s3为例。
In[8]:s3['e'] = 9
In[9]:s3
out[9]:a 5.0
b 3.0
c 7.0
d 1.0
e 9.0
dtype: float64
但还有没其他方法呢?我们可以用一个常量来填充缺失值,这时可以使用fillna方法。
In[10]:s3.fillna(11)
In[11]:s3
out[11]:a 5.0
b 3.0
c 7.0
d 1.0
e 9.0
dtype: float64
请仔细观察下面的结果哦!
In[12]:s4 = s1.reindex(['a','b','c','d','e','f'])
In[13]:s4
out[13]:
a 5.0
b 3.0
c 7.0
d 1.0
e NaN
f NaN
dtype: float64
In[14]:s4.fillna(11)
In[15]:s4
out[15]:
a 5.0
b 3.0
c 7.0
d 1.0
e 11.0
f 11.0
dtype: float64
我们发现两个缺失值都被填充成了我们所填充的常数,于是我们就归纳出fillna方法的作用——对所有缺失值进行填充。但填充的结果取决于我们指定的数字。
In[16]:s4.fillna(11.13)
In[17]:s4
out[17]:
a 5.00
b 3.00
c 7.00
d 1.00
e 11.13
f 11.13
dtype: float64
可以看到我们指定不同的数字,那么fillna按顺序对缺失值进行填充。
我们还可以用原有数据进行填充。
In[18]:s5 = s1.reindex(['a', 'e', 'b', 'f', 'c', 'd'])
In[19]:s5
out[19]:
a 5.0
e NaN
b 3.0
f NaN
c 7.0
d 1.0
dtype: float64
In[20]:s5.fillna(method='ffill')#向前填充
In[21]:s5.fillna(method = 'bfill')#向后填充
image
我们看到,e和f的缺失值都分别用它们前面的数字填充了!
image
我们看到,e和f的缺失值都分别用它们后面的数字填充了!
关注公众号“神经网络与深度学习”获取更多精彩内容!