Использование Ruby CSV для извлечения одного столбца - PullRequest
4 голосов
/ 11 мая 2011

Я пытался работать с получением одного столбца из файла 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') %>

Это дает мне "неопределенный метод 'col' error"

Может кто-нибудь объяснить мне, как я должен использовать CSV? и если есть способ получить столбцы быстрее, используя «чтение» вместо «таблица»?

Я использую Ruby 1.92, который говорит, что он использует более быстрый CSV, поэтому мне не нужно использовать гем FasterCSV.

Ответы [ 2 ]

12 голосов
/ 12 мая 2011

Чтобы вытащить столбец из CSV, я бы, вероятно, сделал что-то вроде следующего:

col_data = []
CSV.foreach(FILENAME) {|row| col_data << row[COL_INDEX]}

Это должно быть значительно быстрее, чем любые операции с CSV.Table

6 голосов
/ 30 января 2015

Вы можете получить значения из одного столбца CSV-файлов, используя следующий фрагмент:

@dataTable = CSV.table('path_to_csv.csv')
@dataTable[:columnname]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...