in torcharrow/velox_rt/dataframe_cpu.py [0:0]
def append(self, values: Iterable[Union[None, dict, tuple]]):
it = iter(values)
try:
value = next(it)
if value is None:
if not self.dtype.nullable:
raise TypeError(
f"a tuple of type {self.dtype} is required, got None"
)
else:
df = self.append([{f.name: None for f in self.dtype.fields}])
df._data.set_null_at(len(df) - 1)
return df
elif isinstance(value, dict):
assert self._data.children_size() == len(value)
res = {}
for k, v in value.items():
idx = self._data.type().get_child_idx(k)
child = self._data.child_at(idx)
dtype = self.dtype.fields[idx].dtype
child_col = ColumnFromVelox._from_velox(
self.device, dtype, child, True
)
child_col = child_col.append([v])
res[k] = child_col
new_data = self._fromdata(res, self._mask + [False])
return new_data.append(it)
elif isinstance(value, tuple):
assert self._data.children_size() == len(value)
return self.append(
[{f.name: v for f, v in zip(self.dtype.fields, value)}]
).append(it)
else:
raise TypeError(
f"Unexpected value type to append to DataFrame: {type(value).__name__}, the value being appended is: {value}"
)
except StopIteration:
return self