我已经尝试过了:
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]]
的列。为此,我必须构建一个字符串。每次事先构建该字符串的尝试均无效。
答案 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
希望有帮助!