---
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`