簡體   English   中英

數據框成numpy數組,逗號分隔

[英]Dataframe into numpy array with values comma seperated

場景

我已經將csv(\\ t分隔)讀入了一個Dataframe,現在需要采用numpy數組格式進行聚類,而無需更改類型

問題

到目前為止,根據嘗試的引用(如下),我未能按要求獲得輸出。 我嘗試獲取的兩列值在int64 / float64中,如下所示

         uid   iid       rat
0        196   242  3.000000
1        186   302  3.000000
2         22   377  1.000000

目前,我僅對iidrat感興趣,並將其傳遞給Kmeans.fit()方法,而在EPSILON中也是如此。 我需要以下格式

預期格式

[[242, 3.000000],
[302, 3.000000],
[22, 1.000000]]

嘗試失敗

X = values[:, 1:2]
Y = values[:, 2:3]
someArray = np.array([X,Y])
print someArray

並沒有告別執行

[[[  2.42000000e+02]
  [  3.02000000e+02]
  [  3.77000000e+02]
  ..., 
  [  1.35200000e+03]
  [  1.62600000e+03]
  [  1.65900000e+03]]
 [[  3.00000000e+00]
  [  3.00000000e+00]
  [  1.00000000e+00]
  ..., 
  [  1.00000000e+00]
  [  1.00000000e+00]
  [  1.00000000e+00]]]

迄今為止無用的參考文獻

  1. 這個
  2. 這兩個
  3. 這三個
  4. 這四個

編輯1

嘗試np_df = np.genfromtxt('AllData.csv', delimiter='\\t', unpack=True)並得到了這個

[[             nan   1.96000000e+02   1.86000000e+02 ...,   4.79000000e+02
    4.79000000e+02   4.79000000e+02]
 [             nan   2.42000000e+02   3.02000000e+02 ...,   1.36000000e+03
    1.39400000e+03   1.65200000e+03]
 [             nan   3.00000000e+00   3.00000000e+00 ...,   2.00000000e+00
    1.92803605e+00   1.00000000e+00]]

使用基於標簽的選擇和所得pandas對象的.values屬性,它們將是某種numpy數組:

>>> df
   uid  iid  rat
0  196  242  3.0
1  186  302  3.0
2   22  377  1.0
>>> df.loc[:,['iid','rat']]
   iid  rat
0  242  3.0
1  302  3.0
2  377  1.0
>>> df.loc[:,['iid','rat']].values
array([[ 242.,    3.],
       [ 302.,    3.],
       [ 377.,    1.]])

注意,您的整數列將被提升為浮點型。

還要注意,可以通過不同的方式來進行此特定選擇:

>>> df.iloc[:, 1:] # integer-position based
   iid  rat
0  242  3.0
1  302  3.0
2  377  1.0
>>> df[['iid','rat']] # plain indexing performs column-based selection
   iid  rat
0  242  3.0
1  302  3.0
2  377  1.0

我喜歡基於標簽的標簽,因為它更明確。

編輯

您看不到逗號的原因是如何打印numpy數組:

>>> df[['iid','rat']].values
array([[ 242.,    3.],
       [ 302.,    3.],
       [ 377.,    1.]])
>>> print(df[['iid','rat']].values)
[[ 242.    3.]
 [ 302.    3.]
 [ 377.    1.]]

實際上,這是numpy數組strrepr結果之間的區別

>>> print(repr(df[['iid','rat']].values))
array([[ 242.,    3.],
       [ 302.,    3.],
       [ 377.,    1.]])
>>> print(str(df[['iid','rat']].values))
[[ 242.    3.]
 [ 302.    3.]
 [ 377.    1.]]

為什么不將'csv'導入為numpy數組?

import numpy as np 
def read_file( fname): 
    return np.genfromtxt( fname, delimiter="/t", comments="%", unpack=True) 

看來您首先需要read_csvDataFrame首先僅過濾第二和第三列,然后按values轉換為numpy數組:從sklearn.cluster以pd格式導入pandas從pandas.compat導入KMeans導入StringIO

temp=u"""col,iid,rat
4,1,0
5,2,4
6,3,3
7,4,1"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), usecols = [1,2])
print (df)
   iid  rat
0    1    0
1    2    4
2    3    3
3    4    1

X = df.values 
print (X)
[[1 0]
 [2 4]
 [3 3]
 [4 1]]

kmeans = KMeans(n_clusters=2)
a = kmeans.fit(X)
print (a)
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
    n_clusters=2, n_init=10, n_jobs=1, precompute_distances='auto',
    random_state=None, tol=0.0001, verbose=0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM