我正在尝试将输入数据列(Numpy 数组类型)转换为不同类型的(浮点型和 U30)



我花了很多时间尝试这个问题,包括询问导师和其他同学的反馈。似乎没人能弄明白。我非常绝望,因为这个任务今天到期,我需要这个代码来测试我的其他代码。问题如下:

" NumPy在Task 1中创建的数组的数据类型是非结构化的。这是因为,在默认设置中,NumPy决定每个值的数据类型。此外,Task 1中的输出包含在我们的分配中可能不需要的标题行。因此,删除标题行并将所有列转换为float类型(即"float"),除了输入参数索引指定的列(如下所述)。此外,索引中未提及的其余列应该使用长度为30个字符的Unicode(即"

编写一个可以完成上述任务的函数data_type_format(data, indexes),其中输入的数据为NumPy数组,索引包含要转换为<U30数据类型的列索引(在list中),数据中未在索引中的其余列将转换为float类型。&quot;>

这是我在任务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')])

最新更新