Почему pandas.rank не работает в этом случае? - PullRequest
0 голосов
/ 18 февраля 2019

Я не понимаю, почему pandas.rank не работает в этом случае.Код следующий:

spot_mkt = pd.read_excel("NEWCurrencyData.xlsx", sheet_name = "SPOTGBP", index_col = 0, header = 0)
fwd_mkt = pd.read_excel("NEWCurrencyData.xlsx", sheet_name = "UKFWD", index_col = 0, header = 0)
spot_bid = pd.read_excel("NEWCurrencyData.xlsx", sheet_name = "SPOTGBPBID", index_col = 0, header = 0)
spot_ask = pd.read_excel("NEWCurrencyData.xlsx", sheet_name = "SPOTGBPASK", index_col = 0, header = 0)


def create_diff_spot_fwd_dataframe(spot, fwd, spot_bid, spot_ask):
    diff_df = pd.DataFrame(index = spot.index, columns = spot.columns)    
    for j in range(len(spot.columns)):    
        for i in range(len(spot.index)):
            if not np.isnan(spot_bid.iloc[i, j]) and not np.isnan(spot_ask.iloc[i, j]):
                try:
                    diff_df.iloc[i, j] = np.log(fwd.iloc[i, j] / spot.iloc[i, j])
                except:
                    diff_df.iloc[i, j] = np.nan
            else:
                diff_df.iloc[i, j] = np.nan
    return diff_df


df = create_diff_spot_fwd_dataframe(spot_mkt, fwd_mkt, spot_bid, spot_ask)
df.iloc[0] = df.iloc[0].rank(method = "first", na_option = "keep", ascending = False)

Когда я пытаюсь ранжировать, например, первую строку DataFrame, сгенерированную функцией, я получаю следующую ошибку:

ValueError: сначала не поддерживается для нечисловых данных

Я не понимаю, почему.Если я оцениваю первую строку одного из импортированных файлов, он работает просто отлично.Я подумал, что проблема может заключаться в том, что результат np.log не считается функцией с плавающей запятой функцией .rank, но это не так, потому что, если я изменяю тип, он тоже не работает.Если я поменяю «first» на «max», рейтинг сработает.Однако я не могу рисковать иметь два значения с одинаковым рейтингом, поэтому мне нужно «сначала».Может кто-нибудь помочь?Заранее спасибо.

...