请问pandas中如下代码的运行原理?

import pandas as pd
import numpy as np

angle = pd.DataFrame({'ratio':np.array([0.5, 0.75, 1.0, 1.5, 1.75], dtype=np.float),
                      'alpha':np.array([63, 53., 45, 33, 29], dtype=np.float),
                      'beta1':np.array([29.5, 29, 28, 26, 25], dtype=np.float),
                      'beta2':np.array([40, 39, 37, 35, 35], dtype=np.float)})

def search_b1b2(n):
    '''根据 ratio 查找对应的 beta1, beta2 和 alpha'''
    temp = angle[angle['ratio']==n]
    beta1 = temp.loc[temp.index[0], 'beta1']
    beta2 = temp.loc[temp.index[0], 'beta2']
    alpha = temp.loc[temp.index[0], 'alpha']
    return beta1, beta2, alpha
    
n = 1
print(search_b1b2(n))

运行结果是:

(28.0, 37.0, 45.0)

其中

temp = angle[angle['ratio']==n]
  1. 上一行代码的运行原理是什么?
  2. angle['ratio'] 不是表格吗? 为什么能与 n 判断相等?
  3. angle['ratio']==n 不是返回的是布尔值吗,为什么能作为 angle[angle['ratio']==n] 的索引?
  4. 另外,请问 下 temp.index[0] 是什么意思?为什么最后 return 返回的是元组?
阅读 1.9k
1 个回答
  1. angle['ratio'] 不是表格吗?
    angle 是表格,angle['ratio'] 是选出 'ratio' 那一列的数据。
  2. 为什么能与 n 判断相等?angle['ratio']==n 不是返回的是布尔值吗,为什么能作为angle[angle['ratio']==n]的索引?
    选出 ratio 那列数据之后,数组中的每个元素分别与 n 进行比较,得到一个 bool 数组。选出 [0.5, 0.75, 1.0, 1.5, 1.75] 判断是否与1相等,得到 [false, false, true, false, false]。numpy 提供了 bool 数组索引的机制,所以返回 true 对应的那一行。
  3. temp.index[0] 是什么意思?
    返回 temp 这张表的第 0 行的索引值。这里你在构建 angle 的时候没有指定索引,所以默认用数字做索引,所以返回 0。
  4. 为什么最后 return 返回的是元组?
    你函数里写的是 return beta1, beta2, alpha,python 中对于多返回值是用 tuple 打包处理的

P.S.
看到前面我以为你 pandas 基础为 0,看到最后一个问题我才知道你 python 基础为 0,好好找本书看看吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题