Python 我想将.csv文件转换为Numpy数组
我想将Python 我想将.csv文件转换为Numpy数组,python,numpy,csv,Python,Numpy,Csv,我想将mydata.csv文件转换为Numpy数组 我有一个矩阵表示法mydata.csv文件 (矩阵为14*79,带符号值,不带任何标题名。) 我以为这个代码对这个案子有用 import numpy as np data = np.genfromtxt('mydata.csv', dtype=float, delimiter=',', names=False) 但它没有起作用 我希望最终的Numpy数据形状为data.shape=(14,79) 但我的错误消息如下所示 ---------
mydata.csv
文件转换为Numpy数组
我有一个矩阵表示法mydata.csv
文件
(矩阵为14*79,带符号值,不带任何标题名。)
我以为这个代码对这个案子有用
import numpy as np
data = np.genfromtxt('mydata.csv', dtype=float, delimiter=',', names=False)
但它没有起作用
我希望最终的Numpy数据形状为data.shape=(14,79)
但我的错误消息如下所示
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-26-060012d7c568> in <module>
1 import numpy as np
2
----> 3 data = np.genfromtxt('output.csv', dtype=float, delimiter=',', names=False)
~\Anaconda3\envs\tensorflow\lib\site-packages\numpy\lib\npyio.py in genfromtxt(fname, dtype, comments, delimiter, skip_header, skip_footer, converters, missing_values, filling_values, usecols, names, excludelist, deletechars, replace_space, autostrip, case_sensitive, defaultfmt, unpack, usemask, loose, invalid_raise, max_rows, encoding)
1810 deletechars=deletechars,
1811 case_sensitive=case_sensitive,
-> 1812 replace_space=replace_space)
1813 # Make sure the names is a list (for 2.5)
1814 if names is not None:
~\Anaconda3\envs\tensorflow\lib\site-packages\numpy\lib\_iotools.py in easy_dtype(ndtype, names, defaultfmt, **validationargs)
934 # Simple dtype: repeat to match the nb of names
935 if nbtypes == 0:
--> 936 formats = tuple([ndtype.type] * len(names))
937 names = validate(names, defaultfmt=defaultfmt)
938 ndtype = np.dtype(list(zip(names, formats)))
TypeError: object of type 'bool' has no len()
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
1作为np导入numpy
2.
---->3 data=np.genfromtxt('output.csv',dtype=float,delimiter=',',names=False)
genfromtxt中的~\Anaconda3\envs\tensorflow\lib\site packages\numpy\lib\npyio.py(fname、dtype、comments、delimiter、skip_header、skip_footer、converter、missing_值、filling_值、usecols、names、excludelist、deletechars、replace_space、autostrip、区分大小写、defaultfmt、unpack、usemask、usemask、lose、lose、invalid_raise、max_行、
1810 deletechars=deletechars,
1811区分大小写=区分大小写,
->1812替换_空间=替换_空间)
1813#确保姓名是一个列表(适用于2.5)
1814如果名称不是无:
easy\u数据类型中的~\Anaconda3\envs\tensorflow\lib\site packages\numpy\lib\\iotools.py(ndtype,name,defaultfmt,**validationargs)
934#简单数据类型:重复以匹配名称的nb
935如果nbtypes==0:
-->936格式=元组([ndtype.type]*len(名称))
937名称=验证(名称,defaultfmt=defaultfmt)
938 ndtype=np.dtype(列表(zip(名称、格式)))
TypeError:类型为“bool”的对象没有len()
为此,首先创建要附加的CSV
文件(文件名)列表。然后,您可以通过重塑Numpy数组将其导出到单个CSV
文件中。这将帮助您向前迈进:
import pandas as pd
import numpy as np
combined_csv_files = pd.concat( [ pd.read_csv(f) for f in file_names ])
现在,如果要将这些文件导出到单个.csv文件中,请使用以下命令:
combined_csv_files.to_csv( "combined_csv.csv", index=False)
现在,为了获得Numpy阵列,您可以按如下方式前进:
data_set = pd.read_csv('combined_csv.csv', header=None)
data_frames = pd.DataFrame(data_set)
required_array = np.array(data_frames.values)
print(required_array)
在此,您还可以使用以下方法重塑Numpy阵列:
required_array.shape = (100, 14, 79)
我已对cmd进行了简单测试,以确认这一点:
>>> y = np.zeros((2, 3, 4))
>>> y.shape
(2, 3, 4)
>>> y.shape = (3, 8)
>>> y
array([[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.]])
试试这个:
import pandas as pd
import numpy as np
mydata = pd.read_csv("mydata.csv")
mydata_array = np.array(mydata)
Out:
array([[-0.26169 , -0.022418, 0.47564 , 0.39925 , -0.22232 , 0.16129 ],
[-0.33073 , 0.026102, 0.62409 , -0.098799, -0.086641, 0.31832 ],
[-0.22134 , 0.15488 , 0.69289 , -0.26515 , -0.021011, 0.47096 ]])
False
是名称的错误值
:
In [350]: np.genfromtxt(txt, names=False)
---------------------------------------------------------------------------
...
TypeError: object of type 'bool' has no len()
names=None
可以,但这是默认值,因此不需要
看起来分隔符是空白。我没有看到任何逗号。默认的数据类型是float。在示例数据中,分隔符不是逗号(可能是一个制表符),“name”应该是“None”或其他一些东西,但不是“False”。@MichaelButscher
导入numpy作为np
数据=np.genfromtxt('mydata.csv',dtype=float,delimiter='\t',names=None)
但是数据现在是[nan nan nan nan nan]
显然您已经尝试了delimiter='、'
和delimiter='\t'
。您能准确地找出文件中的分隔符而不是猜测吗?文件是如何创建的?您能在编辑器中打开文件并检查字符吗这两个字段是分开的吗?@WarrenWeckesser我将在这里共享mydata.csv
这两个np.loadtxt('mydata.csv',delimiter='\t')
和np.genfromtxt('mydata.csv',delimiter='\t')
对我有效。它有效!但我还有一个问题。如果我想合并很多数据集(假设我有mydata_1.csv、mydata_2.csv、mydata_3.csv、mydata_100.csv),我如何能自动组合成一个具有shape=(100、14、79)的numpy数组?因为我需要将我自己的数据与卷积神经网络代码一起使用,而卷积神经网络代码与MNIST数据集一起使用。@mario119:您不应该在注释中添加您的要求,而应该将它们添加到问题中。现在,选定的答案涵盖的主题不是问题的一部分,而实际的问题已经移到后台。这没有帮助对于那些通过搜索引擎访问此页面的人来说,它起作用了!我认为输出是numpy数组。但是,数组([…,…,…],…])
和[…][…]之间有什么区别?
In [347]: txt = """-0.094391 -0.086641 0.31659 0.66066 -0.33076 0.02751
...: -0.26169 -0.022418 0.47564 0.39925 -0.22232 0.16129
...: -0.33073 0.026102 0.62409 -0.098799 -0.086641 0.31832
...: -0.22134 0.15488 0.69289 -0.26515 -0.021011 0.47096""".splitli
...: nes()
In [348]: txt
Out[348]:
['-0.094391 -0.086641 0.31659 0.66066 -0.33076 0.02751',
'-0.26169 -0.022418 0.47564 0.39925 -0.22232 0.16129',
'-0.33073 0.026102 0.62409 -0.098799 -0.086641 0.31832',
'-0.22134 0.15488 0.69289 -0.26515 -0.021011 0.47096']
In [349]: np.genfromtxt(txt)
Out[349]:
array([[-0.094391, -0.086641, 0.31659 , 0.66066 , -0.33076 , 0.02751 ],
[-0.26169 , -0.022418, 0.47564 , 0.39925 , -0.22232 , 0.16129 ],
[-0.33073 , 0.026102, 0.62409 , -0.098799, -0.086641, 0.31832 ],
[-0.22134 , 0.15488 , 0.69289 , -0.26515 , -0.021011, 0.47096 ]])
In [350]: np.genfromtxt(txt, names=False)
---------------------------------------------------------------------------
...
TypeError: object of type 'bool' has no len()