我花了很多时间尝试这个问题,包括询问导师和其他同学的反馈。似乎没人能弄明白。我非常绝望,因为这个任务今天到期,我需要这个代码来测试我的其他代码。问题如下:
" NumPy在Task 1中创建的数组的数据类型是非结构化的。这是因为,在默认设置中,NumPy决定每个值的数据类型。此外,Task 1中的输出包含在我们的分配中可能不需要的标题行。因此,删除标题行并将所有列转换为float类型(即"float"),除了输入参数索引指定的列(如下所述)。此外,索引中未提及的其余列应该使用长度为30个字符的Unicode(即"
编写一个可以完成上述任务的函数data_type_format(data, indexes),其中输入的数据为NumPy数组,索引包含要转换为<U30数据类型的列索引(在list中),数据中未在索引中的其余列将转换为float类型。">
这是我在任务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
("清华2020年1月30 06:58:27 + 0000","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')])