熊猫:将CSV加载为2D矩阵

时间:2014-09-10 06:49:05

标签: python csv pandas scipy

我刚刚开始使用scipy / pandas,这可能绝对容易,但我迷失在这里。

我有一个包含3列的CSV文件:用户艺术家评分

现在我想要一个2D矩阵,其中行是用户,列是艺术家,评级是内容。

我尝试pandas.read_csv(file, index_col = [0,1]),但后来我

               rating
user  artist         
amy   swift       4.0
      psy         3.0
      houston     4.0
ben   swift       5.0
      psy         2.0
clara psy         3.5
      houston     4.0
daisy swift       5.0
      houston     3.0

但现在我无法索引数据[:,:]等行和列。 如果我做data.unstack()输出是一个带有NaNs的2D矩阵,那里没有数据,就像我想要的那样! 但是,我仍然无法索引,因为data.indexIndex([u'amy', u'ben', u'clara', u'daisy'], dtype='object')所以我只能再次向一个方向索引。

如何实现这个2D矩阵?

谢谢。

EDIT1:

如果结果是以后我取消堆叠:

>>> data2.ix[:,:]
         rating            
artist  houston  psy  swift
user                       
amy           4  3.0      4
ben         NaN  2.0      5
clara         4  3.5    NaN
daisy         3  NaN      5

然后我想将Psy列索引为:data2.ix[:,'psy'] 但我得KeyError: 'psy' data2.ix[:,:]虽然有效。

>>> data2.ix[:,['psy']]
Empty DataFrame
Columns: []
Index: [amy, ben, clara, daisy]

EDIT2: 预期产出

>>> data2.ix[:,1]
user
amy      3.0
ben      2.0
clara    3.5
daisy    NaN
Name: (rating, psy), dtype: float64

但我想用'psy'代替1。

Edit3:csv

amy swift   4
amy psy 3
amy houston 4
ben swift   5
ben psy 2
clara   psy 3.5
clara   houston 4
daisy   swift   5
daisy   houston 3

1 个答案:

答案 0 :(得分:0)

一旦取消堆叠,数据框就会为rating提供额外的层次结构。这似乎可以按照您的要求运行:

import pandas
raw = {'rating': {('amy', 'houston'): 4.0,
  ('amy', 'psy'): 3.0,
  ('amy', 'swift'): 4.0,
  ('ben', 'psy'): 2.0,
  ('ben', 'swift'): 5.0,
  ('clara', 'houston'): 4.0,
  ('clara', 'psy'): 3.5,
  ('daisy', 'houston'): 3.0,
  ('daisy', 'swift'): 5.0}}
data = pandas.DataFrame(raw)
data2 = data.unstack()

data2.rating.ix[:, 'psy']

=>

amy      3.0
ben      2.0
clara    3.5
daisy    NaN
Name: psy, dtype: float64