按名称列表对Pandas中的多个列进行切片

我正在尝试通过两种不同的方法在Pandas数据框中选择多个列:

1)通过列号,例如1-3列和6列起。

2)通过列名列表,例如:

years = list(range(2000,2017))

months = list(range(1,13))

years_month = list(["A", "B", "B"])

for y in years:

for m in months:

y_m = str(y) + "-" + str(m)

years_month.append(y_m)

然后, 将产生以下内容:

['A',

'B',

'C',

'2000-1',

'2000-2',

'2000-3',

'2000-4',

'2000-5',

'2000-6',

'2000-7',

'2000-8',

'2000-9',

'2000-10',

'2000-11',

'2000-12',

'2001-1',

'2001-2',

'2001-3',

'2001-4',

'2001-5',

'2001-6',

'2001-7',

'2001-8',

'2001-9',

'2001-10',

'2001-11',

'2001-12']

也就是说,在两种方法中,仅加载名称在 列表中的列的最佳(或正确)方法是什么?

回答:

我认为您需要numpy.r_合并列的位置,然后iloc用于选择:

print (df.iloc[:, np.r_[1:3, 6:len(df.columns)]])

对于第二种方法子集,通过list

print (df[years_month])

样品:

df = pd.DataFrame({'2000-1':[1,3,5],

'2000-2':[5,3,6],

'2000-3':[7,8,9],

'2000-4':[1,3,5],

'2000-5':[5,3,6],

'2000-6':[7,8,9],

'2000-7':[1,3,5],

'2000-8':[5,3,6],

'2000-9':[7,4,3],

'A':[1,2,3],

'B':[4,5,6],

'C':[7,8,9]})

print (df)

2000-1 2000-2 2000-3 2000-4 2000-5 2000-6 2000-7 2000-8 2000-9 A \

0 1 5 7 1 5 7 1 5 7 1

1 3 3 8 3 3 8 3 3 4 2

2 5 6 9 5 6 9 5 6 3 3

B C

0 4 7

1 5 8

2 6 9

print (df.iloc[:, np.r_[1:3, 6:len(df.columns)]])

2000-2 2000-3 2000-7 2000-8 2000-9 A B C

0 5 7 1 5 7 1 4 7

1 3 8 3 3 4 2 5 8

2 6 9 5 6 3 3 6 9


您也可以总结的ranges(投来listpython 3是必要的):

rng = list(range(1,3)) + list(range(6, len(df.columns)))

print (rng)

[1, 2, 6, 7, 8, 9, 10, 11]

print (df.iloc[:, rng])

2000-2 2000-3 2000-7 2000-8 2000-9 A B C

0 5 7 1 5 7 1 4 7

1 3 8 3 3 4 2 5 8

2 6 9 5 6 3 3 6 9

以上是 按名称列表对Pandas中的多个列进行切片 的全部内容, 来源链接: utcz.com/qa/411047.html

回到顶部