C# Панды read_csv Эквивалент

Я довольно хорошо знаком с пирамидами данных, но сейчас я работаю с C# DataTables. Я пытаюсь прочитать CSV с указанным разделителем в DataTable. В Python это будет так же просто, как

import pandas 

df = pandas.read_csv(csvPath, delimiter = "|")

Есть ли эквивалент в C# что-то вроде

string csvPath = "myPath.csv";

DataTable dt = new DataTable();

dt.CsvHelper.CsvReader(csvPath, delimiter = "|");

Я посмотрел документацию по CsvHelper, но в примерах предполагается, что вы создали объект, который отражает csv. В моем случае я не знаю, как будет выглядеть CSV и, следовательно, не сможет создать класс отображения.

Я открыт для использования чего-то другого, кроме CsvHelper, я просто хочу убедиться, что оно устойчиво при работе с разделителями, отличными от ",".

2 ответа

Решение

Cinchoo ETL - библиотека с открытым исходным кодом, позволяющая легко конвертировать CSV в DataTable с помощью нескольких строк кода

using (var p = new ChoCSVReader("sample.csv").WithFirstLineHeader())
{
    var dt = p.AsDataTable();
}

Ознакомьтесь с статьей CodeProject для получения дополнительной помощи.

Отказ от ответственности: я автор этой библиотеки.

Вы можете использовать CsvDataReader из этого хранилища https://github.com/ttustonic/LightGBMSharp

E сть CsvDataReader в каталоге Example, который является автономным файлом, поэтому вам не нужно остальное.

Он реализует IDataReader интерфейс и может быть использован для загрузки DataTable,

Вот пример. Допустим, что ваш CSV-файл выглядит так:

Id  Name    Age
1   Mark    100
2   Joe 32
3   Betty   55

Этот код:

var dt = new DataTable();
using (var rdr = new CsvDataReader(file, true)) // set true if the csv has header line, false otherwise
{
    //rdr.ColumnTypes = new Type[] { typeof(int), typeof(string), typeof(int) }; Uncomment this if you know the structure of the csv
    dt.Load(rdr);
}
foreach (DataRow r in dt.Rows)
{
    for (int i = 0; i < dt.Columns.Count; i++)
        Console.Write($"{dt.Columns[i]}:{r[i]}  ");
    Console.WriteLine("");
}

даст следующий вывод:

Id:1  Name:Mark  Age:100
Id:2  Name:Joe  Age:32
Id:3  Name:Betty  Age:55

Разделителем по умолчанию является TAB, который можно изменить в конструкторе.

Другие вопросы по тегам