Я не понимаю, почему 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», рейтинг сработает.Однако я не могу рисковать иметь два значения с одинаковым рейтингом, поэтому мне нужно «сначала».Может кто-нибудь помочь?Заранее спасибо.