gpt4 book ai didi

dataframe - 尝试使用 Arrow.jl 保存 DataFrame 给出 : ArgumentError: type does not have a definite number of fields. 整数元组的元组

转载 作者:行者123 更新时间:2023-12-05 01:54:09 28 4
gpt4 key购买 nike

我有一个数据框,我想使用 Arrow.write() 保存它。

我可以通过省略一列来保存它的一个子帧。但是,如果我保留该列,则会出现此错误:

ArgumentError: type does not have a definite number of fields

此列中的对象都是 4 元组,它们的元素都是空元组或 Int64 的 1 或 2 元组。典型的例子是 ((1), (), (2), ())((1, 2), (), (), ()) .如果我使用数组的数组而不是元组的元组,它工作得很好。我更喜欢使用元组,并且我宁愿不必在写入之前和读取数据之后处理数据(请注意,这也排除了诸如使用四个单独的列之类的事情——另外我怀疑有 2 元组和 1-同一列中的元组和空元组会产生相同的错误)。

我不太明白这里错误的含义,所以我不确定如何修复它。 简单的解决方法吗?还是我需要改用数组?

这是一个最小的工作示例,它给我这个错误:

using Arrow, DataFrames

x = ((1,), (1,), (), ());
y = ((1, 2), (), (), ());
df = DataFrame(col = [x, y]);
Arrow.write("test.arrow", df)

如果我使用 col=[x]col=[y],它会起作用,所以问题源于在同一向量中具有两个元组形状。也许这是 Arrow 的基本限制?

有关错误消息的更多详细信息:错误消息来自第 764 行的 reflection.jl,在 fieldcount(@nospecialize t) 中。此函数由 Arrow 的 arrowvector(在 `arraytypes/struct.jl' 中)调用。这是完整的函数定义:

function arrowvector(::StructKind, x, i, nl, fi, de, ded, meta; kw...)
len = length(x)
validity = ValidityBitmap(x)
T = Base.nonmissingtype(eltype(x))
data = Tuple(arrowvector(ToStruct(x, j), i, nl + 1, j, de, ded, nothing; kw...) for j = 1:fieldcount(T))
return Struct{withmissing(eltype(x), namedtupletype(T, data)), typeof(data)}(validity, data, len, meta)
end

fieldcount 在第 5 行被调用,但我不知道 T 对我的用例来说是什么。

最佳答案

可能您需要更新您的软件包,因为您的问题在这些软件包的当前版本下无法重现。

PS 很难找到任何好的理由将这样的结构保存在数据框中。以每列都具有用于数据操作的最佳结构(例如 Int、Float64 等)的方式转换数据

关于dataframe - 尝试使用 Arrow.jl 保存 DataFrame 给出 : ArgumentError: type does not have a definite number of fields. 整数元组的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70809128/

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