[英]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
目前,我僅對iid和rat感興趣,並將其傳遞給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]]]
迄今為止無用的參考文獻
嘗試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數組的str
和repr
結果之間的區別 :
>>> 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_csv
的DataFrame
首先僅過濾第二和第三列,然后按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.