[python] 如何在熊貓中獲取數據幀的列片


2 Answers

DataFrame.ix索引就是你想要訪問的內容。 這有點令人困惑(我同意Pandas索引有時令人困惑!),但下面的內容似乎可以做你想做的事情:

>>> df = DataFrame(np.random.rand(4,5), columns = list('abcde'))
>>> df.ix[:,'b':]
      b         c         d         e
0  0.418762  0.042369  0.869203  0.972314
1  0.991058  0.510228  0.594784  0.534366
2  0.407472  0.259811  0.396664  0.894202
3  0.726168  0.139531  0.324932  0.906575

其中.ix [行切片,列切片]是正在解釋的內容。 有關熊貓索引的更多信息,請訪問: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced : http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced

Question

我從csv文件加載一些機器學習數據。 前兩列是觀察值,其餘列是特徵。

目前,我做了以下工作:

data = pandas.read_csv('mydata.csv')

其中給出瞭如下內容:

data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))

我想在兩個數據框中分割這個數據幀:一個包含列ab ,另一個包含列cde

不可能寫出類似的東西

observations = data[:'c']
features = data['c':]

我不確定最好的方法是什麼。 我需要一個pd.Panel嗎?

順便說一句,我發現數據幀索引相當不一致: data['a']是允許的,但data[0]不是。 另一方面, data['a':]是不允許的,但data[0:]是。 這有沒有實際的原因? 如果列由Int索引,給定data[0] != data[0:1]




如果你來這裡尋找切分兩列的列並將它們組合在一起(像我一樣),你可以做類似的事情

op = df[list(df.columns[0:899]) + list(df.columns[3593:])]
print op

這將創建一個新的數據框,前900列和(全部)列> 3593(假設您的數據集中有大約4000列)。




另外,給定一個DataFrame

數據

就像在你的例子中一樣,如果你只想提取第a列和第d列(即第1列和第4列),熊貓數據框中的iloc mothod就是你需要的並且可以非常有效地使用。 所有你需要知道的是你想要提取的列索引。 例如:

>>> data.iloc[:,[0,3]]

會給你

          a         d
0  0.883283  0.100975
1  0.614313  0.221731
2  0.438963  0.224361
3  0.466078  0.703347
4  0.955285  0.114033
5  0.268443  0.416996
6  0.613241  0.327548
7  0.370784  0.359159
8  0.692708  0.659410
9  0.806624  0.875476



Related