2014-03-13 22 views
-2

我知道熊貓是否有數據框(df),您可以使用df.columns.values獲取列以返回一個對象(不確定其類型)但您可以將其轉換爲字符串。將列表解析爲熊貓數據框以僅顯示那些列

如果我的數據框有10列,並且我知道前三個的名稱,我可以創建一個字符串,並將其解析爲數據框以僅顯示那些列?

subset_columns['one','two','three'] 
df[[subset_colimns]] 
df OUT >> 
one | two | three 
1345 415 1654 
13445 56576 76r76 

回答

1

您可以通過鑄造或使用numpy的tolist()功能列列表轉換。然後,您可以從這個通過正常的方式切片選擇:

In [5]: 
import pandas as pd 
df = pd.DataFrame(dict(zip(list('abcdefghij'), [arange(10)] * 10))) 
cols = df.columns.values.tolist() 
# you can also do list(df.columns) 

In [11]: 
cols 

Out[11]: 
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] 

In [12]: 
subcols = cols[2:5] 
df[subcols] 

Out[12]: 
    c d e 
0 0 0 0 
1 1 1 1 
2 2 2 2 
3 3 3 3 
4 4 4 4 
5 5 5 5 
6 6 6 6 
7 7 7 7 
8 8 8 8 
9 9 9 9 

[10 rows x 3 columns] 

爲了選擇多個不連續的列,你可以這樣做:

In [36] 
part1 = cols[0:3] 
part2 = cols[6:8] 
subcols = part1+part2 
df[subcols] 

Out[36]: 

    a b c g h 
0 0 0 0 0 0 
1 1 1 1 1 1 
2 2 2 2 2 2 
3 3 3 3 3 3 
4 4 4 4 4 4 
5 5 5 5 5 5 
6 6 6 6 6 6 
7 7 7 7 7 7 
8 8 8 8 8 8 
9 9 9 9 9 9 

[10 rows x 5 columns] 
+0

可以從您的列表的片段I-J,說我想要的冷杉四,然後跳過接下來的2,然後給我3個? 所以a,b,c,d,g,h? – yoshiserry

+0

@yoshiserry不簡明扼要你會因爲某些原因做'part1 = cols [0:3],part2 = cols [6:8],subcols = part1 + part2,df [subcols]'' – EdChum

+0

(解析列的一個子集)它將索引和第一列'Load year'結合在一起,我該如何阻止它? – yoshiserry

0

是的,你可以選擇所需的列。

df = pd.read_csv("../SO/data.csv") 
df.head() 
    card_number effective_date expiry_date grouping_name Ac. Year code 
0 1206090  28 Sep 2012  21 Aug 2013  Dummy no.1 201213 
1 1206090  21 Feb 2013  21 Aug 2013  Dummy no.2 201213 
2 1206090  28 Sep 2012  30 Nov 2012  Dummy no.3 201213 
3 1206090  03 Dec 2012  21 Aug 2013  Dummy no.3 201213 
4 1206090  23 Apr 2013  31 Aug 2013  Dummy no.4 201213 

req_cols低於所需的列的列表:

req_cols = ['card_number', 'expiry_date', 'grouping_name'] 
df[req_cols].head() 

    card_number expiry_date grouping_name 
0 1206090  21 Aug 2013  Dummy no.1 
1 1206090  21 Aug 2013  Dummy no.2 
2 1206090  30 Nov 2012  Dummy no.3 
3 1206090  21 Aug 2013  Dummy no.3 
4 1206090  31 Aug 2013  Dummy no.4