我有两个具有许多列的数据帧,D1(具有列:V1_1,V1_2 ....)和D2(具有列:V2_1,V2_2 ...)。 但是我对所有列都不感兴趣,我只想要其他第三个数据框指示的列。 第三个数据框有两列,第一列是数据框的名称,第二列是带有某些变量名称的列表。 像这样:
DataFrame | Vbles
D1 | ['V1_1','V1_27','V1_30']
D2 | ['V2_2','V2_3']
假设其名称为var_sel,索引为“ DataFrame”。
现在,我想从D1中提取var_sel[Vbles][var_sel.index=='D1']
中的变量,但是我不知道如何。
我已经尝试过:
col=var_sel[Vbles][var_sel.index=='D1']
col= col[D1]
我得到:
"['V1_1','V1_27','V1_30']"
现在,我想要D1中的列,所以我尝试:
D1[col]
和D1[[col]]
。
但是我遇到错误...请有人帮我吗?
谢谢。
答案 0 :(得分:0)
您的问题尚不清楚。但是,如果您希望将DataFrame D1中的列名(单独存储),则可以尝试:
D1。列
如果这不是您想要的,那么提供一段代码可能会有所帮助。
答案 1 :(得分:0)
以下应该可以解决问题:
col = var_sel.loc['D1', 'Vbles']
D1.loc[:, eval(col)]
问题是您的列表['V1_1','V1_27','V1_30']
实际上存储为字符串"['V1_1','V1_27','V1_30']"
。为了能够像列表一样使用它们,我们必须将它们变成列表。我们可以使用eval
。
eval
基本上将要执行的python代码作为字符串,并返回执行的代码返回的内容。在我们的示例中,此代码是返回列表的列表文字['V1_1','V1_27','V1_30']
。
应该注意,使用eval可能很危险,因为您可以想象,它将执行您扔给它的任何东西,因此这可能是一个巨大的安全问题。话虽这么说,但是如果您使用它将某些字符串形式的列表转换为您自己的计算机私密性中的列表形式,那没什么大不了的。