我一直在尝试从csv文件中提取一列。
我已经看过了http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html的文档,但仍然不知道如何使用它。
如果我使用CSV.table
,与CSV.read
相比,响应速度非常慢。我承认我正在加载的数据集非常大,这正是我只想从中获取单个列的原因。
我的请求现在看起来像这样
@dataTable = CSV.table('path_to_csv.csv')
当我调试的时候我得到的响应是
#<CSV::Table mode:col_or_row row_count:2104 >
文档说我应该可以使用by_col(),但是当我尝试输出
<%= debug @dataTable.by_col('col_name or index') %>
它给了我“undefined method 'col' error”
有人能给我解释一下如何使用CSV吗?如果有一种方法可以更快地获得列使用'读'而不是'表'?
我正在使用Ruby 1.92,它说它使用FasterCSV,所以我不需要使用FasterCSV gem。
3条答案
按热度按时间n3schb8v1#
要从CSV中提取列,我可能会执行以下操作:
这应该比CSV上的任何操作都要快得多。
nzkunb0c2#
您可以使用以下代码片段从csv文件的单个列中获取值。
g2ieeal73#
我发现这对我很有效(我在这里使用了OP的变量名):
这将打印列
Field1
中的所有值,作为一个包含一个元素的数组的数组:[value1],[value2],[value3]...
等等。所以将在一个数组中打印
Field1
列中的所有值。如果你想一个接一个地遍历一个表中的所有字段,那么这里有一种方法可以做到这一点。首先,您必须进行转换,以便索引引用列而不是行,使用
by_col!
。然后索引将引用列而不是行,你可以这样做:这是一种从CSV文件中处理汇总值的方法,然后可以使用该汇总值创建数据透视表。如果需要从CSV文件输入数据并以数据透视表的形式输出汇总数据,这可能是一种直接的方法。