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 从.csv文件中读取值并将其转换为浮点数组_Python_Arrays_Csv_Numpy_Data Conversion - Fatal编程技术网

Python 从.csv文件中读取值并将其转换为浮点数组

Python 从.csv文件中读取值并将其转换为浮点数组,python,arrays,csv,numpy,data-conversion,Python,Arrays,Csv,Numpy,Data Conversion,我偶然发现了一个小的编码问题。我必须从一个.csv文件中读取数据,这个文件看起来很像: 2011-06-19 17:29:00.000,72,44,56,0.4772,0.3286,0.8497,31.3587,0.3235,0.9147,28.5751,0.3872,0.2803,0,0.2601,0.2073,0.1172,0,0.0,0,5.8922,1,0,0,0,1.2759 arr = np.genfromtxt(filename, delimiter=',',

我偶然发现了一个小的编码问题。我必须从一个.csv文件中读取数据,这个文件看起来很像:

2011-06-19 17:29:00.000,72,44,56,0.4772,0.3286,0.8497,31.3587,0.3235,0.9147,28.5751,0.3872,0.2803,0,0.2601,0.2073,0.1172,0,0.0,0,5.8922,1,0,0,0,1.2759
arr = np.genfromtxt(filename, delimiter=',',
                    converters={'Date': make_date},
                    names=('Date', 'Stock', 'Action', 'Amount') +
                    tuple('col{i}'.format(i=i) for i in range(22)),
                    dtype = None)
现在,我基本上需要一个由这样的行组成的完整文件,并将它们解析为numpy数组。到目前为止,我已经能够使用类似以下代码将它们放入一个大字符串类型的对象中:

order_hist = np.loadtxt(filename_input,delimiter=',',dtype={'names': ('Year', 'Mon', 'Day', 'Stock', 'Action', 'Amount'), 'formats': ('i4', 'i4', 'i4', 'S10', 'S10', 'i4')})
截至目前,该文件的格式由一组S20数据类型组成。我基本上需要将big ORDER_HIST数据类型中的所有数据提取到每列的一组数组中。我不知道如何保存日期时间列(我现在一直将其作为字符串保存)。我需要将其余部分转换为float,但下面的代码给了我一个错误:

    temparr=float[:len(order_hist)]
    for x in range(len(order_hist['Stock'])): 
        temparr[x]=float(order_hist['Stock'][x]);

有人能告诉我如何将所有列转换为所需的数组吗???或者可以给我一些链接吗?

男孩,我有请你吃的东西吗。具有
转换器
参数,允许您在解析文件时为每列指定函数。函数将输入CSV字符串值。其返回值成为numpy数组中的对应值

此外,
dtype=None
参数告诉
genfromtxt
对每个列的类型进行智能猜测。特别是,数字列会自动转换为适当的数据类型

例如,假设您的数据文件包含

2011-06-19 17:29:00.000,72,44,56
然后

屈服

(datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56)
[('Date', '|O4'), ('Stock', '<i4'), ('Action', '<i4'), ('Amount', '<i4')]
(datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56, 0.4772, 0.3286, 0.8497, 31.3587, 0.3235, 0.9147, 28.5751, 0.3872, 0.2803, 0, 0.2601, 0.2073, 0.1172, 0, 0.0, 0, 5.8922, 1, 0, 0, 0, 1.2759)
屈服

(datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56)
[('Date', '|O4'), ('Stock', '<i4'), ('Action', '<i4'), ('Amount', '<i4')]
(datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56, 0.4772, 0.3286, 0.8497, 31.3587, 0.3235, 0.9147, 28.5751, 0.3872, 0.2803, 0, 0.2601, 0.2073, 0.1172, 0, 0.0, 0, 5.8922, 1, 0, 0, 0, 1.2759)

您可能还对在
numpy
基础上构建的模块感兴趣,该模块将解析CSV提升到更高的层次:它有一个函数,其
parse_dates=True
参数将自动解析日期字符串(使用)

使用pandas,您的csv可以通过

df = pd.read_csv(filename, parse_dates = [0,1], header = None,
                    names=('Date', 'Stock', 'Action', 'Amount') +
                    tuple('col{i}'.format(i=i) for i in range(22)))

注意:无需指定
make_date
功能
。需要明确的是--
pands.read\u csv
返回一个
DataFrame,而不是numpy数组。
DataFrame
实际上可能对您的目的更有用,但您应该知道,它是一个不同的对象,有着全新的方法可供开发和探索。

您为什么不使用
csv
模块呢?我只能正确地获取行数?我是说。。。我如何从中转换每个专栏?嘿,非常感谢这个人!!!!我只是有一个后续问题。现在我想把这些值中的一些移动到独立的数组中。。。我该怎么做呢?好的。。。我已经把数据放进去了。。我怎么称呼它?我是否只需执行arr['Stock']?如果您只想解析某些列,请使用
genfromtxt
中的
usecols=[…]
参数。它允许您指定要在数组中使用的列名或列索引号的列表。是
arr['Stock']
返回
Stock
列numpy数组。我可以用数字来调用列吗?如果我想说在列之间运行一个循环?我能不能用arr[1]来代替arr['Stock']???