我不明白为什么在这种情况下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:首先不支持非数字数据
我不明白为什么。如果我将其中一个导入文件的第一行排名,则效果很好。 我认为问题可能是nrank.log的结果不被.rank函数认为是浮点数,但事实并非如此,因为如果更改类型,它也不起作用。 如果我将“ first”更改为“ max”,则排名有效。但是,我不能冒险拥有两个具有相同排名的值,因此我需要“第一”。 有人可以帮忙吗?预先谢谢你。