如何在保留索引的同时将Pandas数据帧转换为np.array?

时间:2017-05-31 13:14:55

标签: python pandas

例如,我有一小组数据(来自movielens)

check.csv

userId,movieId,rating,timestamp
1,31,2.5,1260759144
1,1029,3.0,1260759179
1,1061,3.0,1260759182
2,17,5.0,835355681
3,267,3.0,1298861761
3,296,4.5,1298862418
3,318,5.0,1298862121

如果我这样做

rating = pd.read_csv('check.csv')

Y = pd.pivot_table(rating, values='rating', index=['movieId'], columns=['userId']).values

它将创建3 * 7矩阵。但我想要的是3 * 1061(将userId作为列索引,将movie作为行索引)。如何实现3 * 1061矩阵 如何制作1061 * 3矩阵S,S [31] [1] = 2.5 S [1029] [1] = 3等,所有缺失的条目等于零。

2 个答案:

答案 0 :(得分:0)

好的,那么,我想你想要这个。

df = pd.read_csv('check.csv')
Y = pd.pivot_table(df, values=['rating'], index=['movieId'], columns=['userId'])

df_out = pd.DataFrame(index=np.arange(Y.index.values.max())
          ).merge(Y, left_index=True, right_index=True, how='outer'
          ).fillna(0))

答案 1 :(得分:0)

df = pd.read_csv('check.csv')
Y = pd.pivot_table(df, values=['rating'], index=['movieId'], columns=['userId'])

            rating
 userId     1       2      3
 movieId
   31      2.5      0      0
   1029    3.0      0      0
   1061    3.0      0      0
   17       0       5.0    0
   296      0       0     4.0

剩余价值将根据csv值而来。更多详情http://pbpython.com/pandas-pivot-table-explained.html