尝试访问多索引数据框中的特定列,但我得到长度不匹配错误



我正在尝试创建一个函数,允许我在一个多索引数据框架中从两个特定列创建一个新的数据框架。然而,我得到这个错误&;ValueError:长度不匹配:预期轴有0个元素,新值有3个元素&;从我的理解,它告诉我,我已经创建了一个数据框架,有零列,但我已经创建了数据框架与3列。

我不确定我哪里错了。下面是我的代码:

def pairs(ticker1, ticker2):
pairs = pd.DataFrame()
pairs.columns = ['Date', ticker1, ticker2]
pairs = data_df.loc[data_df['Ticker'] == ticker1]
pairs = pairs.merge(data_df.loc[data_df['Ticker'] == ticker2], on='Date')
return pairs

这是我试图从中获取数据的数据帧的图片:

我试过使用类似

的东西
pairs = data.df[(data_df.ticker1.isin([ticker1,ticker2])) & (data_df.ticker2.isin([ticker1,ticker2]))]

也不能让它工作。我可能犯了一个非常明显的新手错误

你定位索引的方式是错误的,你应该为你的索引定义一个标签名称,例如,让我们假设你有两个列colAcolB,你应该为两个列定义一个标签,例如,a标签为colA,b标签为colB,所以,如果你想访问colB,你可以通过以下代码行访问它:

df.loc[(a, b), 'colB']

如果您得到长度不匹配错误,可能是因为您指定的索引在DataFrame中不存在,或者因为您试图选择具有不同长度的多个列和索引。请确保您指定的索引是正确的,并且您只选择具有匹配长度的列。

现在,让我们更深入地研究你的问题,如果你想选择有不同长度的多个索引,你可能会得到长度不匹配的错误,为了避免这种情况的发生,你可以单独选择你的列,或者你可以使用布尔索引来选择有匹配长度的列,就像下面的代码行:

matchesCol = df. columns[df.loc[(a, b)].notna().all()]
df.loc[(a, b), matchesCol]

最新更新