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, который можно изменить в конструкторе.