如何在C#中的deedle系列中处理null(缺失)值?

时间:2015-08-12 18:48:20

标签: c# dataframe deedle

我应如何处理deedle系列中的缺失值?

例如,我有一系列字段为NameBirthDate,其中BirthDate最初为DateTime?,我需要将BirthDate转换为{{ 1}}。

String

这是我尝试过的,但它不起作用。 将丢失的var newDOB = df.GetColumn<DateTime?>("DOB").Select(x => x.Value.Value != null ? x.Value.Value.ToString("dd/MM/yyyy") : " "); df.ReplaceColumn("DOB", newDOB); 值转换为DateTime?的最佳方法是什么? 在C#中处理Deedle系列和Deedle数据帧中缺失值的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

当您创建Deedle系列时,Deedle会检测到无效值并将其视为自动丢失 - 因此当您使用<div class="container"> <div class="row"> <div class="col-sm-12 padding__top__10" id="row--e6s4d"> <table class="table table-bordered table-striped margin__bottom__10" id="table__cars"> <tbody data-set="0" data-url="http://127.0.0.1:8888/selfstudy/projects/ad/res/test/212302246.php"> <tr> <td rowspan="3"> <img class="img--thumbnail" src=""> </td> <td>Model</td> <td>Corvette C5 Cabrio</td> <td rowspan="2"><span class="glyphicon glyphicon-remove"></span></td> </tr> <tr> <td>Erstzulassung</td> <td>EZ 03/2001</td> </tr> <tr> <td>Killometerstand</td> <td>96.000 km</td> <td>yes</td> </tr> </tbody> <tbody data-set="1" data-url="http://127.0.0.1:8888/selfstudy/projects/ad/res/test/212302263.json"> <tr> <td rowspan="3"><img class="img--thumbnail" src=""> </td> <td>Model</td> <td>BMW X5 4.4 i aus erster Hand</td> <td rowspan="2"><span class="glyphicon glyphicon-remove"></span></td> </tr> <tr> <td>Erstzulassung</td> <td>EZ 07/2000</td> </tr> <tr> <td>Killometerstand</td> <td>226.000 km</td> <td>yes</td> </tr> </tbody> </table> </div> </div> </div> NaN创建系列时,这些值会自动转换为缺失值(和这也适用于无效的。)

此外,null方法会跳过所有缺失值。例如,请考虑以下系列:

Select

在这里,Deedle认识到每五个值都缺失了。当您致电Series<int, DateTime?> ds = Enumerable.Range(0, 100).Select(i => new KeyValuePair<int, DateTime?>(i, i%5==0 ? (DateTime?)null : DateTime.Now.AddHours(i)) ).ToSeries(); ds.Print(); 时,它仅将操作应用于有效值,并且每五个值仍为缺失值:

Select

如果您想对缺少的值执行某些操作,可以使用 ds.Select(kvp => kvp.Value.Value.ToString("D")).Print(); (使用指定的字符串填充它们或复制系列中上一项的值)或FillMissing以丢弃他们来自这个系列。您还可以使用DropMissing来调用SelectOptional函数,这样您就可以为缺失值实现自己的自定义逻辑。

这也意味着,如果您有OptionalValue<V>,那么它实际上并不是非常有用,因为Series<K, DateTime?>值全部由Deedle处理 - 因此您可以使用{将null转换为Series<K, DateTime> {1}}让Deedle为你处理缺失值。