Pandas最详细教程来了( 四 )

运行结果如图3-18所示 。

Pandas最详细教程来了

文章插图
▲图3-18
需要注意的是 , 如果只有一个时间点 , 那么返回的值是Series对象 , 代码如下:
df.loc['20160102',['A','C']]输出结果如下:
A   -0.816178C   -0.595195Name: 2016-01-02 00:00:00, dtype: float64如果想要获取DataFrame对象 , 需要使用如下命令:
df.loc['20160102':'20160102',['A','C']]运行结果如图3-19所示 。
Pandas最详细教程来了

文章插图
▲图3-19
上面介绍的是loc方法 , 是按标签(索引)来选取数据的 。有时候 , 我们会希望按照DataFrame的绝对位置来获取数据 , 比如 , 如果想要获取第3行第2列的数据 , 但不想按标签(索引)获取 , 那么这时候就可以使用iloc方法 。
根据位置选取数据 , 代码如下:
df.iloc[2]输出结果如下:
A    0.030206B    0.759953C   -1.446549D   -0.874364Name: 2016-01-03 00:00:00, dtype: float64再来看一个示例:
df.iloc[3:6,1:3]运行结果如图3-20所示 。
Pandas最详细教程来了

文章插图
▲图3-20
注意:对于DataFrame数据类型 , 可以使用[]运算符来进行选取 , 这也是最符合习惯的 。但是 , 对于工业代码 , 推荐使用loc、iloc等方法 。因为这些方法是经过优化的 , 拥有更好的性能 。
有时 , 我们需要选取满足一定条件的数据 。这个时候可以使用条件表达式来选取数据 。这时传给df的既不是标签 , 也不是绝对位置 , 而是布尔数组(Boolean Array) 。下面来看一下示例 。
例如 , 寻找A列中值大于0的行 。首先 , 生成一个布尔数组 , 代码如下:
df.A>0输出结果如下:
2016-01-01    False2016-01-02    False2016-01-03     True2016-01-04     True2016-01-05     True2016-01-06     True2016-01-07     True2016-01-08    FalseFreq: D, Name: A, dtype: bool可以看到 , 这里生成了一个Series类型的布尔数组 。可以通过这个数组来选取对应的行 , 代码如下:
df[df.A>0]运行结果如图3-21所示 。
Pandas最详细教程来了

文章插图
▲图3-21
从结果可以看到 , A列中值大于0的所有行都被选择出来了 , 同时也包括了BCD列 。
现在我们要寻找df中所有大于0的数据 , 先生成一个全数组的布尔值 , 代码如下:
df>0运行结果如图3-22所示 。
Pandas最详细教程来了

文章插图
▲图3-22
下面来看一下使用df>0选取出来的数据效果 。由图3-23可以看到 , 大于0的数据都能显示 , 其他数据显示为NaN值 。
df[df>0]运行结果如图3-23所示 。
Pandas最详细教程来了

文章插图
▲图3-23
再来看一下如何改变df的值 。首先我们为df添加新的一列E , 代码如下:
df['E']=0df运行结果如图3-24所示 。
Pandas最详细教程来了

文章插图
▲图3-24
使用loc改变一列值 , 代码如下:
df.loc[:,'E']=1df运行结果如图3-25所示 。
Pandas最详细教程来了

文章插图
▲图3-25
使用loc改变单个值 , 代码如下:
df.loc['2016-01-01','E'] = 2df运行结果如图3-26所示 。
Pandas最详细教程来了

文章插图
▲图3-26
使用loc改变一列值 , 代码如下:
df.loc[:,'D'] = np.array([2] * len(df))df


推荐阅读