在Pandas DataFrame中动态选择多个列

时间:2019-05-13 15:37:05

标签: python pandas

我已经尝试过了:

a = 'v2'
b = 'v10'

df1[[a]]             #returns the column with the name v2
df1[[a+ "," + b]]    #KeyError: "['v2,v10'] not in index"

我还尝试了a="'v2'" + "," + "'v10'"之类的不同方法,但没有一种有效。有人可以帮助我完成这项工作吗?

编辑: 抱歉,我的意思不够清楚。我必须添加:

让我们说我有一个功能:

def foo(*args):

,现在我要选择args中提供的所有列。我的想法是用

构建一个字符串
for i in args:
    str = i + str

,然后选择带有df1[[str]]的列。为此,我必须构建一个字符串。每次事先构建该字符串的尝试均无效。

5 个答案:

答案 0 :(得分:2)

df1[[a, b]]为您提供['v2', 'v10']的两列df1中的一个(切片)。而df1[[a+ "," + b]]为您提供了a+ "," + b中名为'v2,v10'的列df1的列。

答案 1 :(得分:1)

您可以只使用pandasql

import pandasql as ps
q = "SELECT {} FROM df1 ".format(a+','+b)
print(ps.sqldf(q, locals()))
   v2  v10
0   1    2
1   3    4
2   5    6

答案 2 :(得分:0)

您无需连接字符串即可创建要选择的列列表:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.array([[1, 2], [3, 4], [5, 6]]), columns=['v2', 'v10'])

a = 'v2'
b = 'v10'

df1[[a, b]]

输出:

    v2  v10
0   1   2
1   3   4
2   5   6

如果您想要一个变量,也可以这样想:

c = [a, b]
df1[c]

答案 3 :(得分:0)

我使用的解决方案是:

def test(*args):
    out = df1.filter(items=args)
    return out
print(test('v10', 'v2'))

答案 4 :(得分:-1)

要选择列列表,请在列表中定义它们:["v1", ..., "v10"]

df = pd.DataFrame(
    [["5004490", "20002075", "15946454"],
     ["5003807", "00601731", "15947894"],
     ["5003808", "00601731", "78945611"]],
    columns=['v1', 'v2', 'v10']
)
print(df)
#         v1        v2       v10
# 0  5004490  20002075  15946454
# 1  5003807  00601731  15947894
# 2  5003808  00601731  78945611

column_name = ["v1", "v10"]
print(df[column_name])
#         v1       v10
# 0  5004490  15946454
# 1  5003807  15947894
# 2  5003808  78945611

希望有帮助!