1 回答

TA貢獻(xiàn)1773條經(jīng)驗 獲得超3個贊
首先,您調(diào)用rawDf.FillMissing
然后打印的第二組示例rawDF
不會執(zhí)行任何操作,因為 Deedle 數(shù)據(jù)幀(大部分)是不可變的。諸如FillMissing
返回新的(填充的)數(shù)據(jù)框之類的操作并且不修改原始數(shù)據(jù)框。因此,使用操作的正確方法就像在第一組示例中一樣,將結(jié)果分配給一個新變量,然后打印它。
我遇到的第二個問題是,當(dāng)您從(例如)CSV 文件讀取示例數(shù)據(jù)時,文件中的空字符串不會被視為缺失值,而是被視為有效(空)字符串值。如果您使用Select
空字符串并將其轉(zhuǎn)換為:,Deedle 可以將這些值視為缺失值null
:
var df = Frame.ReadCsv("C:/temp/aa.csv"); var dfEmpty = df.SelectValues((string s) => (s == "") ? null : s);
FillMissing
現(xiàn)在,當(dāng)您像以前一樣使用該操作時,您應(yīng)該會看到發(fā)生了一些事情:
var fillFwd = dfEmpty.FillMissing(Direction.Backward); fillFwd.Print();
正如您正確指出的那樣,這并沒有達(dá)到您想要的效果 - 它從上到下填充值。您想從左到右填充數(shù)據(jù)。一種方法是使用Select
它來單獨轉(zhuǎn)換每一行:
var fillRight = Frame.FromRows(dfEmpty.Rows.Select(row => row.Value.FillMissing(Direction.Forward))); fillRight.Print();
您還可以轉(zhuǎn)置數(shù)據(jù)框,然后填充缺失的值,然后將其轉(zhuǎn)回(這是表達(dá)您需要的內(nèi)容的很好的方式,但轉(zhuǎn)置可能比僅使用更耗時)Select
:
var fillRight = dfEmpty.Transpose().FillMissing(Direction.Forward).Transpose()
- 1 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報