我应如何处理deedle系列中的缺失值?
例如,我有一系列字段为Name
和BirthDate
,其中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数据帧中缺失值的最佳方法是什么?
答案 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为你处理缺失值。