鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python/ 請問pandas中如下代碼的運(yùn)行原理?

請問pandas中如下代碼的運(yùn)行原理?

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):
    '''根據(jù) ratio 查找對應(yīng)的 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))

運(yùn)行結(jié)果是:

(28.0, 37.0, 45.0)

其中

temp = angle[angle['ratio']==n]
  1. 上一行代碼的運(yùn)行原理是什么?
  2. angle['ratio'] 不是表格嗎? 為什么能與 n 判斷相等?
  3. angle['ratio']==n 不是返回的是布爾值嗎,為什么能作為 angle[angle['ratio']==n] 的索引?
  4. 另外,請問 下 temp.index[0] 是什么意思?為什么最后 return 返回的是元組?
回答
編輯回答
還吻
  1. angle['ratio'] 不是表格嗎?
    angle 是表格,angle['ratio'] 是選出 'ratio' 那一列的數(shù)據(jù)。
  2. 為什么能與 n 判斷相等?angle['ratio']==n 不是返回的是布爾值嗎,為什么能作為angle[angle['ratio']==n]的索引?
    選出 ratio 那列數(shù)據(jù)之后,數(shù)組中的每個(gè)元素分別與 n 進(jìn)行比較,得到一個(gè) bool 數(shù)組。選出 [0.5, 0.75, 1.0, 1.5, 1.75] 判斷是否與1相等,得到 [false, false, true, false, false]。numpy 提供了 bool 數(shù)組索引的機(jī)制,所以返回 true 對應(yīng)的那一行。
  3. temp.index[0] 是什么意思?
    返回 temp 這張表的第 0 行的索引值。這里你在構(gòu)建 angle 的時(shí)候沒有指定索引,所以默認(rèn)用數(shù)字做索引,所以返回 0。
  4. 為什么最后 return 返回的是元組?
    你函數(shù)里寫的是 return beta1, beta2, alpha,python 中對于多返回值是用 tuple 打包處理的

P.S.
看到前面我以為你 pandas 基礎(chǔ)為 0,看到最后一個(gè)問題我才知道你 python 基礎(chǔ)為 0,好好找本書看看吧。

2018年3月6日 13:15