将人工智能培训数据(.csv)读取到Python中的特定数据结构中
我是python新手,我正在尝试执行一项简单的任务,即读取.csv文件并将其保存在特定的数据结构中。我使用numpy加载数据,得到了将人工智能培训数据(.csv)读取到Python中的特定数据结构中,python,csv,numpy,data-structures,artificial-intelligence,Python,Csv,Numpy,Data Structures,Artificial Intelligence,我是python新手,我正在尝试执行一项简单的任务,即读取.csv文件并将其保存在特定的数据结构中。我使用numpy加载数据,得到了ndarray的ndarray,这不是我想要的 我的代码: import numpy filename = '../HTRU2/HTRU_2.csv' raw_data = open(filename, 'rU') data = numpy.loadtxt(raw_data, delimiter=',') 我要寻找的数据结构是一个列表,由元组组成。元组是一对(x,
ndarray
的ndarray
,这不是我想要的
我的代码:
import numpy
filename = '../HTRU2/HTRU_2.csv'
raw_data = open(filename, 'rU')
data = numpy.loadtxt(raw_data, delimiter=',')
我要寻找的数据结构是一个列表,由元组组成。元组是一对(x,y)的ndarray
s:x是一个ndarray
形状(nx-1,1)的float
s,其中nx是文件中每行的元素数减去1;y是一个形状为(1,1)的ndarray
,它保存行的最后一个元素(也是一个浮点
)
你可能会认为这是我编造的一些疯狂的数据结构,但它实际上非常有用,因为我的最终目标是将其放入神经网络中(如果你知道NN,你可能会猜到元组实际上是一对输入/输出,两者都是列矩阵)。我不能改变数据结构
文件示例:
140.5625,55.68378214,-0.234571412,-0.699648398,3.199832776,19.11042633,7.975531794,74.24222492,0
102.5078125,58.88243001,0.465318154,-0.515087909,1.677257525,14.86014572,10.57648674,127.3935796,0
每个元组如下所示:
# x y
[[140.5625]
[55.68378214]
[-0.234571412]
[-0.699648398]
[3.199832776]
[19.11042633]
[7.975531794]
[74.24222492]] , [[0]]
第二个论点可能没有必要
最后:
df = [tuple(x) for x in df.values]
但是你真的需要一个元组层吗?为什么不添加一个维度:
In [67]: data.reshape(3,4,1)
Out[67]:
array([[[ 0],
[ 1],
[ 2],
[ 3]],
[[ 4],
[ 5],
[ 6],
[ 7]],
[[ 8],
[ 9],
[10],
[11]]])
我找到了一个解决方案:
import numpy
filename = '../HTRU2/test.csv'
file = open(filename, 'rU')
data = numpy.loadtxt(file, delimiter=',')
training_data = list()
for test in data:
training_data.append((test[:-1].reshape(8, 1), test[-1].reshape(1, 1)))
其中输入神经元的数量为8,输出神经元的数量为1。一些样本输入和结果数据结构将非常有用。另外,我猜你可能不想要这个结构,只是简单地为你的数据数组建立适当的索引,或者把它放到熊猫数据帧中。@miradulo我知道我遗漏了什么,对不起。将在几秒钟内进行编辑。首先,您能否从csv
获取合理的二维浮点数组?没有错误,投诉列数不相等,nan
用于字符串等?如果是这样的话,那么让我们不要再担心csv,集中精力将数组转换为您的结构。@hpaulj我没有错误,只是一个完美的2d数组,对我来说没有多大用处。为什么您需要每个浮点数都位于自己的ndarray
?这没有多大意义data.tolist()
将该数组转换为列表列表。然后,您可以遍历列表并将子列表转换为元组。这只会给我一个pandas.DataFrame,它本质上是一个数组数组(或类似数组的数组)。很抱歉,我一开始错过了您问题的这一部分。试试我的编辑。另外,它更像是一个Pandas系列数据结构的数组……非常好的语法,可以与R的dplyr相媲美。我认为它仍然没有创建我需要的元组。我已经对我的问题进行了编辑,以包括文件的示例和生成的数据结构。实际上,我在自己的代码中使用了这种精确的方法,所以它应该可以工作。你能详细说明这给你的输出出了什么问题吗?如果在你的代码之后我运行了我实际需要运行的代码,它会给我一个错误。代码:for _tuplein df:for x,y in _tuple:doSomething(x,y)
Error:“numpy.float64”对象不可编辑。它接近我需要的值,但元组与我指定的值不完全相同。我的元组需要类似于一对(x,y),然后我可以对元组中的x,y执行。请看我在问题中所写的示例。好的,您有一个额外的ndarray
嵌套层。在显示中分离元组和ndarray层是一件痛苦的事情。还不清楚元组的内容是2d数组还是带有object dtype的1d数组。它确实类似于我所要求的,但我需要它基于元组。我把我的问题重新表述得更清楚了。
In [67]: data.reshape(3,4,1)
Out[67]:
array([[[ 0],
[ 1],
[ 2],
[ 3]],
[[ 4],
[ 5],
[ 6],
[ 7]],
[[ 8],
[ 9],
[10],
[11]]])
import numpy
filename = '../HTRU2/test.csv'
file = open(filename, 'rU')
data = numpy.loadtxt(file, delimiter=',')
training_data = list()
for test in data:
training_data.append((test[:-1].reshape(8, 1), test[-1].reshape(1, 1)))