Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用np.genfromtxt从csv文件直接强制转换numpy数组?_Python_Arrays_Numpy_Csv - Fatal编程技术网

Python 如何使用np.genfromtxt从csv文件直接强制转换numpy数组?

Python 如何使用np.genfromtxt从csv文件直接强制转换numpy数组?,python,arrays,numpy,csv,Python,Arrays,Numpy,Csv,我正试图直接从csv文件生成numpy数组。我在网上了解到,您可以使用模块的np.genfromtxt函数来执行此操作。我尝试过这个,但我所有的价值观都是否定的。数据集来自kaggle关于纽约出租车的文章 import numpy as np taxi = np.genfromtxt("nyc_taxis.csv", delimiter=";", skip_header=1) print(taxi) 输出为: 数组([nan,nan,nan,…,nan,nan,nan]) 我试图在这个项

我正试图直接从csv文件生成numpy数组。我在网上了解到,您可以使用模块的np.genfromtxt函数来执行此操作。我尝试过这个,但我所有的价值观都是否定的。数据集来自kaggle关于纽约出租车的文章

import numpy as np

taxi = np.genfromtxt("nyc_taxis.csv", delimiter=";", skip_header=1)

print(taxi)

输出为:

数组([nan,nan,nan,…,nan,nan,nan])

我试图在这个项目中提高效率,使用尽可能少的代码行

我还尝试使用np.loadtxt()函数,但它返回了此错误

taxi = np.loadtxt("nyc_taxis.csv", delimiter=";", dtype =np.float, skiprows=1)

ValueError回溯(最近一次调用上次)
在里面
---->1 taxi=np.loadtxt(“nyc_taxis.csv”,delimiter=“;”,dtype=np.float,skiprows=1)
2.
3出租车
loadtxt中的~\anaconda3\lib\site packages\numpy\lib\npyio.py(fname、dtype、注释、分隔符、转换器、skiprows、usecols、unpack、ndmin、编码、最大行数)
1157#转换数据
1158 X=无
->1159用于读取数据中的x(\u loadtxt\u chunksize):
1160如果X为无:
1161 X=np.数组(X,数据类型)
读取数据中的~\anaconda3\lib\site packages\numpy\lib\npyio.py(块大小)
1085
1086#根据列转换每个值并存储
->1087项=[zip(转换器,val)中(conv,val)的conv(val)]
1088
1089#然后根据数据类型的嵌套进行打包
~\anaconda3\lib\site packages\numpy\lib\npyio.py in(.0)
1085
1086#根据列转换每个值并存储
->1087项=[zip(转换器,val)中(conv,val)的conv(val)]
1088
1089#然后根据数据类型的嵌套进行打包
floatconv(x)中的~\anaconda3\lib\site packages\numpy\lib\npyio.py
792如果x中的“0x”:
793返回浮动。从十六进制(x)
-->794回油浮子(x)
795
796 typ=dtype.type
ValueError:无法将字符串转换为浮点:“2016,1,1,5,0,2,4,21.002037,52.00,0.80,5.54,11.65,69.99,1”
非常感谢您的帮助。

  • 您必须设置分隔符=',',因为您的文件是逗号分隔的
  • 您必须手动为字符串列设置dype,否则它将变为nan(仅加载指定其数据类型的列,因此我设置了所有列的数据类型)
我从以下网站下载了test.csv:

纽约市

import numpy as np
dtype=[
    ('id', 'S16'),
    ('vender_id', np.uint8),
    ('pickup_datetime', 'S16'),
    ('passenger_count', np.uint8),
    ('pickup_longitude', np.float32),
    ('pickup_latitude', np.float32),
    ('dropoff_longitude', np.float32),
    ('dropoff_latitude', np.float32),
    ('store_and_fwd_flag', 'S8'),
]
csv = np.genfromtxt('test.csv', delimiter=',', skip_header=1, dtype=dtype)
print(csv[:3])
,其中“S8”表示字符串8字节,输出

❯ python nyc.py
[(b'id3004672', 1, b'2016-06-30 23:59', 1, -73.98813, 40.73203 , -73.99017, 40.75668 , b'N')
 (b'id3505355', 1, b'2016-06-30 23:59', 1, -73.9642 , 40.679993, -73.95981, 40.655403, b'N')
 (b'id1217141', 1, b'2016-06-30 23:59', 1, -73.99744, 40.737583, -73.98616, 40.729523, b'N')]
另外,我推荐熊猫


错误消息中显示的示例显示逗号用作分隔符。为什么要使用分隔符=';'?请尝试使用
delimiter=','
。如果您至少可以显示问题中输入文件的前几行,则会更容易得到他人的帮助。对于
genfromtxt
而言,默认的
dtype
float
。如果csv元素不是有效的数字,它会将
np.nan
放入该槽中。谢谢Naoki。我通知你详细的解释。非常感谢你抽出时间。我的一个问题是,是否必须手动填写元组的类型列表?如中所示,您是否先打开csv文件,然后将标题复制到列表中,并为每个标题指定所需的数据类型?是的,我必须签入其他电子表格软件。仅使用numpy似乎很难做到这一点(numpy主要用于处理数字数据)。使用
dtype=None
names=True
genfromtxt
可以从文件中推断列名和数据类型。因此,我使用hpaulj建议的修改运行了代码,并尝试使用taxi.shape检查数组的形状,它返回了正确的行数,但在返回的元组“taxi.shape out”中没有显示任何列;(89560,)你知道为什么会发生这种事吗?
❯ python nyc.py
[(b'id3004672', 1, b'2016-06-30 23:59', 1, -73.98813, 40.73203 , -73.99017, 40.75668 , b'N')
 (b'id3505355', 1, b'2016-06-30 23:59', 1, -73.9642 , 40.679993, -73.95981, 40.655403, b'N')
 (b'id1217141', 1, b'2016-06-30 23:59', 1, -73.99744, 40.737583, -73.98616, 40.729523, b'N')]