比较不同Deedle数据帧中的值时出现问题

本文关键字:问题 Deedle 数据帧 比较 | 更新日期: 2023-09-27 18:00:21

我有两个名称不同的相同文件,用于填充两个不同的Deedle数据帧。然而,当我试图比较两个数据帧中相同的值时,程序会认为它们不相等。

var Df1 = Frame.ReadCsv("C:/File1.csv");
var Df2 = Frame.ReadCsv("C:/File2.csv");
if (Df1["Header1", 3] == Df2["Header1",3])
{
  Console.WriteLine("The computer sees them as equal");
}
else
{
  Console.WriteLine("The computer sees them as not equal");
}

如果我对这两个值进行强制转换,那么计算机会认为它们是相等的。有没有办法确定这两个值是否相等而不进行强制转换?

var Df1 = Frame.ReadCsv("C:/File1.csv");
var Df2 = Frame.ReadCsv("C:/File2.csv");
if ((string)Df1["Header1", 3] == (string)Df2["Header1",3])
{
  Console.WriteLine("The computer sees them as equal");
}
else
{
  Console.WriteLine("The computer sees them as not equal");
}

比较不同Deedle数据帧中的值时出现问题

我只能猜测,Df2["Header1",3]返回一个object
如果您查看以下链接==操作符MSDN,您将看到reference types==的默认实现仅当它是相同的对象(堆上的相同地址)时才返回true
由于Df1["Header1",3]Df2["Header1",3]是两个不同的对象,==运算符返回false。当您将结果强制转换为string时,将使用值比较(请参阅上面的同一链接),==运算符将返回true
根据Deedle ReadCsv文档,只推断出基元类型,因此,如果该列包含日期,则返回类型将是上面描述的导致对象的行为