--- lang: ja-jp breaks: true --- # C# Microsoft.Data.Analysis の DataFrame を CsvHelperを使用してCSVファイルとして出力する 2021-04-14 Microsoft.Data.Analysis の DataFrame には、一応簡易的なCSV出力機能が実装されているが、実際には使い物にならない為、CsvHelperで代用する。 ## 環境 * Windows Server 2019 * Visual Studio 2019 * Microsoft.Data.Analysis 0.4.0 * CsvHelper 22.1.2 * .Net Framework 4.7.2 ## CsvHelperでCSVファイルに出力する静的メソッド ```csharp= public static void WriteCsv( string csvPath, DataFrame df ) { var fInfo = new FileInfo(csvPath); if (fInfo.Exists) { fInfo.Delete(); } using (FileStream fs = fInfo.OpenWrite()) { Encoding enc = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); //Encoding enc = Encoding.Default; //Encoding enc = Encoding.UTF8; using (StreamWriter stream = new StreamWriter(fs, enc)) { //Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //configuration.HasHeaderRecord = true; CsvConfiguration configuration = new CsvConfiguration( cultureInfo: CultureInfo.CurrentCulture, encoding : enc ); using (CsvWriter writer = new CsvWriter(stream, configuration)) { IReadOnlyList<string> columnNames = df .Columns .Select(n => n.Name) .ToList(); foreach (var item in columnNames) { writer.WriteField(item); } writer.NextRecord(); foreach (DataFrameRow row in df.Rows) { //StringBuilder debug = new StringBuilder(); foreach (object item in row) { StringBuilder stringBuilder = new StringBuilder(); Type left = item?.GetType(); if (left == typeof(bool)) { stringBuilder.AppendFormat(configuration.CultureInfo, "{0}", item); } else if (left == typeof(float)) { stringBuilder.AppendFormat(configuration.CultureInfo, "{0:G9}", item); } else if (left == typeof(double)) { stringBuilder.AppendFormat(configuration.CultureInfo, "{0:G17}", item); } else if (left == typeof(decimal)) { stringBuilder.AppendFormat(configuration.CultureInfo, "{0:G31}", item); } else { stringBuilder.Append(item); } //if (debug != null) //{ // debug.Append(stringBuilder.ToString()).Append(","); //} writer.WriteField(stringBuilder.ToString()); stringBuilder.Clear(); } writer.NextRecord(); //Console.WriteLine(debug); } //stream.Flush(); } } } } ``` ###### tags: `ML.NET` `Microsoft.Data.Analysis DataFrame` `C#` `CsvHelper`