Python 带有列表的数据帧子集

Python 带有列表的数据帧子集,python,pandas,subset,Python,Pandas,Subset,我想根据两个变量列表对数据帧进行子集划分,即: list1=[var1,var2,var3] list2=[var4,var5,var6] data_final = data[list1,list2] 产生此错误的原因: TypeError: unhashable type: 'list' 如果我只提供一个列表,一切正常: data_final = data[list1] 下面是一个例子: dict1 = [{'var0': 0, 'var1': 1, 'var2': 2},

我想根据两个变量列表对数据帧进行子集划分,即:

 list1=[var1,var2,var3]
 list2=[var4,var5,var6]

 data_final = data[list1,list2]
产生此错误的原因:

 TypeError: unhashable type: 'list'
如果我只提供一个列表,一切正常:

 data_final = data[list1]
下面是一个例子:

dict1 = [{'var0': 0, 'var1': 1, 'var2': 2},
     {'var0': 0, 'var1': 2, 'var2': 4},
    {'var0': 1, 'var1': 5, 'var2': 8},
    {'var0': 1, 'var1': 15, 'var2': 12},]
 df = pd.DataFrame(dict1, index=['s1', 's2','s3','s4'])

  list1=['var0']
  list2=['var1','var2']
这两个命令工作正常:

  df[list1]
  df[list2]
但这一条会产生上述错误:

  df[list1,list2]

您需要将列名写入一个列表,而不是列表列表:

data_final= data[[var1,var2,var3],[var4,var5,var6]]
从文档:


您可以将列列表传递给[]以按该顺序选择列。如果数据帧中不包含列,将引发异常。也可以通过这种方式设置多列

这是您期望的输出吗

df[list1 + list2]
Out[106]: 
    var0  var1  var2
s1     0     1     2
s2     0     2     4
s3     1     5     8
s4     1    15    12

要将任意数量的列表加载到行中的数据帧中(只要列表的长度相等),您可以执行以下操作:

import pandas as pd
l1 = [1,2,3]
l2 = [10,20,30]
col_name = ['c1','c2','c3']
row_name = ['r1','r2']
pd.DataFrame([l1,l2],columns=col_name, index=row_name)

    c1  c2  c3
r1   1   2   3
r2  10  20  30
要将任意数量的列表加载到列中的数据框中,必须将列表压缩在一起,如下所示:

l1 = [1,2,3]
l2 = [10,20,30]
col_name = ['c1','c2']
row_name = ['r1','r2','r3']
zipped_list = list(zip(l1,l2))

import pandas as pd

pd.DataFrame(zipped_list,columns=col_name,index=row_name)

    c1  c2
r1   1  10
r2   2  20
r3   3  30

希望对你有帮助,加油

展示一个完整的例子。我已经在原来的帖子中添加了一个例子谢谢你。直到现在我才这么做,但我希望有一种方法可以使用列表,因为我的变量列表变得很长,代码变得很混乱。是的!!!这太棒了,非常感谢你!!谁会想到答案这么简单。也是很好的解决方案。谢谢你的详细解释,这是很好的了解,这是我的个人备忘单,应该在某个时候派上用场。