[英]I'm trying to convert columns of input data (of type Numpy Array) into different types (float and U30)
我花了很多時間來嘗試這個問題,包括詢問導師和其他同行的反饋。 似乎沒有人能夠弄清楚。 我很絕望,因為今天要完成這項任務,我需要這段代碼來測試我的其他代碼。 問題如下。
“任務 1 中由 NumPy 創建的數組的數據類型是非結構化的。這是因為,在默認設置中,NumPy 決定每個值的數據類型。此外,任務 1 中的輸出包含在我們的任務中可能不需要的標題行分配。因此,刪除標題行並將所有列轉換為類型 float(即“float”),除了輸入參數索引指定的列(如下所述)。此外,索引中未提及的其余列應該使用長度為 30 個字符的 Unicode(即“<U30”)。最后,每一行都被轉換為一個類型元組(例如,tuple(i) for i in data)。
編寫一個可以完成上述任務的函數data_type_format(data, index),其中,輸入數據是一個NumPy數組,索引包含要轉換為<U30數據類型的列索引(在列表中),以及數據中不在索引中的其余列將轉換為浮點型。”
這是我在任務 1 中使用的代碼:
import numpy as np
import pandas as pd
def load_mydata(filename):
"return"
df = pd.read_csv(filename,delimiter=',',quotechar="",quoting=3,header=None)
df = df.iloc[:,[0,1,2,5,8,9,10,11,12]]
ndarray = np.array(df,dtype='U30')
return ndarray
這是我嘗試過的一些代碼:
def data_type_format(data,indexes):
"return"
list=[float(element) if indx not in indexes else
str(ord(element)) if len(element)<30 else
element for indx,element in data]
return tuple(list)
import csv
def data_type_format(data,indexes):
"return csv file data as tuple formatted"
list=[]
df = pd.read_csv(data,delimiter=',',quotechar="",quoting=3,header=None)
df = df.iloc[:,[0,1,2,5,8,9,10,11,12]]
ndarray = np.array(df,dtype='U30')
for df in data:
if df in indexes:
df[indexes] = df[indexes].astype(float)
else:
df[indexes]= df[indexes].astype('U30')
list.append(df)
return tuple(list)
代碼需要在 python shell 中使用以下測試進行測試。
data = load_mydata("location_review_data.csv")
data = data_type_format(data, [0, 1, 2, 3])
print(data[0])
#gives result
('周四 1 月 30 日 06:58:27 +0000 2020'、'98675'、'1'、'22847'、0.421、0.442、0.452、0.397、0.357)] 1
我嘗試了許多不同的版本,但沒有一個有效! 使用的 cvs 文件: https : //drive.google.com/file/d/1Qd-xFaK4z5ijSHTmmtR7VhJyFaBzjFvO/view? usp =sharing
使用下載的 csv 我能夠得到
In [181]: import pandas as pd
In [182]: df = pd.read_csv('../Downloads/location_review_data.csv')
In [183]: df
Out[183]:
created_at user_ID review_ID latitude longitude ... sad happy surprise disgust joy
0 Thu Jan 30 06:58:27 +0000 2020 98675 1 30.235909 -97.795140 ... 0.421 0.442 0.452 0.397 0.357
1 Thu Jan 30 06:03:24 +0000 2020 67730 2 30.269103 -97.749395 ... 0.469 0.408 0.488 0.377 0.350
2 Thu Jan 30 06:19:25 +0000 2020 11576 3 30.255731 -97.763386 ... 0.542 0.361 0.276 0.270 0.424
3 Thu Jan 30 06:16:38 +0000 2020 87911 4 30.263418 -97.757597 ... 0.418 0.499 0.352 0.367 0.291
4 Thu Jan 30 06:08:09 +0000 2020 148147 5 30.274292 -97.740523 ... 0.242 0.632 0.532 0.501 0.199
... ... ... ... ... ... ... ... ... ... ... ...
19995 Fri Feb 07 23:47:25 +0000 2020 21591 19996 42.357491 -71.058885 ... 0.437 0.431 0.609 0.446 0.260
19996 Fri Feb 07 23:21:33 +0000 2020 37809 19997 42.357437 -71.058470 ... 0.432 0.412 0.549 0.452 0.219
19997 Fri Feb 07 23:34:48 +0000 2020 39721 19998 42.357553 -71.057779 ... 0.597 0.314 0.311 0.304 0.428
19998 Sat Feb 08 00:18:22 +0000 2020 20873 19999 42.357142 -71.058455 ... 0.452 0.479 0.518 0.442 0.252
19999 Fri Feb 07 23:13:02 +0000 2020 33846 20000 42.357069 -71.058551 ... 0.391 0.490 0.548 0.459 0.199
[20000 rows x 13 columns]
一個結構化數組:
In [184]: data = df.to_records()
In [185]: data.shape
Out[185]: (20000,)
In [186]: data.dtype
Out[186]: dtype((numpy.record, [('index', '<i8'), ('created_at', 'O'), ('user_ID', '<i8'), ('review_ID', '<i8'), ('latitude', '<f8'), ('longitude', '<f8'), ('location_ID', '<i8'), ('friend_count', 'O'), ('follower_count', 'O'), ('sad', '<f8'), ('happy', '<f8'), ('surprise', '<f8'), ('disgust', '<f8'), ('joy', '<f8')]))
'O' dtype 字段包含字符串作為 Python 對象,這是pandas
做法。
使用 numpy 的 csv 閱讀器:
In [192]: data = np.genfromtxt('../Downloads/location_review_data.csv', names=True, dtype=None, delimiter=',', encoding=None, comments=None)
In [193]: data.shape
Out[193]: (20000,)
In [194]: data.dtype
Out[194]: dtype([('created_at', '<U30'), ('user_ID', '<i8'), ('review_ID', '<i8'), ('latitude', '<f8'), ('longitude', '<f8'), ('location_ID', '<i8'), ('friend_count', '<U8'), ('follower_count', '<U22'), ('sad', '<f8'), ('happy', '<f8'), ('surprise', '<f8'), ('disgust', '<f8'), ('joy', '<f8')])
某些列中的“#”給我帶來了問題,因為這是默認的注釋字符。 我不得不停用它。
前 3 行/記錄:
In [195]: data[:3]
Out[195]:
array([('Thu Jan 30 06:58:27 +0000 2020', 98675, 1, 30.23590912, -97.79513958, 22847, '#####', '############', 0.421, 0.442, 0.452, 0.397, 0.357),
('Thu Jan 30 06:03:24 +0000 2020', 67730, 2, 30.26910295, -97.74939537, 420315, '#####', '############', 0.469, 0.408, 0.488, 0.377, 0.35 ),
('Thu Jan 30 06:19:25 +0000 2020', 11576, 3, 30.25573099, -97.76338577, 316637, '#####', '##########', 0.542, 0.361, 0.276, 0.27 , 0.424)],
dtype=[('created_at', '<U30'), ('user_ID', '<i8'), ('review_ID', '<i8'), ('latitude', '<f8'), ('longitude', '<f8'), ('location_ID', '<i8'), ('friend_count', '<U8'), ('follower_count', '<U22'), ('sad', '<f8'), ('happy', '<f8'), ('surprise', '<f8'), ('disgust', '<f8'), ('joy', '<f8')])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.