gpt4 book ai didi

c# - 在 C# 中使用 Deedle 连接两个字符串列

转载 作者:行者123 更新时间:2023-11-30 15:50:58 27 4
gpt4 key购买 nike

函数add_ints correctly添加两个整数列

A,B
2,3
5,7
9,11

在 CSV 文件中。

为什么函数 add_strings 不能正确连接两个字符串列

L,R
"a","b"
"c","d"
"e","f"

进入第三列

L,R,C
"a","b","ab"
"c","d","cd"
"e","f","ef"

当从类似的 CSV 文件开始时?

using Deedle;
using System.IO;

namespace NS
{
class TwoColumnOps
{
static void Main(string[] args)
{
string root = "path/to";
add_ints(root);
add_strings(root);
}
static void add_ints(string root)
{
Deedle.Frame<int, string> df = Frame.ReadCsv(Path.Combine(root, "data_ints.csv"));

Series<int, int> a = df.GetColumn<int>("A");
Series<int, int> b = df.GetColumn<int>("B");

Series<int, int> c = a + b;
df.AddColumn("C", c);
df.Print();
}
static void add_strings(string root)
{
Deedle.Frame<int, string> df = Frame.ReadCsv(Path.Combine(root, "data_strings.csv"));

Series<int, string> a = df.GetColumn<string>("L");
Series<int, string> b = df.GetColumn<string>("R");

// Series<int, string> c = a + b;
// Series<int, string> c = $"{a} and {b}";
Series<int, string> c = string.Concat(a, b);

df.AddColumn("C", c);
df.Print();
}
}
}

所有三种连接方式的错误是:

Error   CS0029  Cannot implicitly convert type 'string' to 'Deedle.Series<int, string>' 

最佳答案

之所以 + 对数字序列有效,而 string.Concat 对字符串序列无效,是因为序列类型定义了一个重载的 + 数字序列的运算符。遗憾的是,这只适用于数字。

对于非数字系列,最简单的选择是使用 ZipInner 对齐两个系列。这为您提供了一系列元组。然后,您可以使用 Select 以元素方式转换值:

var df = Frame.ReadCsv("/some/test/file.csv");
var s1 = df.GetColumn<string>("first");
var s2 = df.GetColumn<string>("second");
var added = s1.ZipInner(s2).Select(t => t.Value.Item1 + t.Value.Item2);
df.AddColumn("added", added);

关于c# - 在 C# 中使用 Deedle 连接两个字符串列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com