MCPcopy Create free account
hub / github.com/apache/arrow / ConvertCategoricals

Function ConvertCategoricals

python/pyarrow/src/arrow/python/arrow_to_pandas.cc:2516–2554  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2514};
2515
2516Status ConvertCategoricals(const PandasOptions& options, ChunkedArrayVector* arrays,
2517 FieldVector* fields) {
2518 std::vector<int> columns_to_encode;
2519
2520 // For Categorical conversions
2521 auto EncodeColumn = [&](int j) {
2522 int i = columns_to_encode[j];
2523 if (options.zero_copy_only) {
2524 return Status::Invalid("Need to dictionary encode a column, but ",
2525 "only zero-copy conversions allowed");
2526 }
2527 compute::ExecContext ctx(options.pool);
2528 ARROW_ASSIGN_OR_RAISE(
2529 Datum out, DictionaryEncode((*arrays)[i],
2530 compute::DictionaryEncodeOptions::Defaults(), &ctx));
2531 (*arrays)[i] = out.chunked_array();
2532 (*fields)[i] = (*fields)[i]->WithType((*arrays)[i]->type());
2533 return Status::OK();
2534 };
2535
2536 if (options.HasCategoricalColumns()) {
2537 for (int i = 0; i < static_cast<int>(arrays->size()); i++) {
2538 if ((*arrays)[i]->type()->id() != Type::DICTIONARY &&
2539 options.IsCategoricalColumn((*fields)[i]->name())) {
2540 columns_to_encode.push_back(i);
2541 }
2542 }
2543 }
2544 if (options.strings_to_categorical) {
2545 for (int i = 0; i < static_cast<int>(arrays->size()); i++) {
2546 if (is_base_binary_like((*arrays)[i]->type()->id()) ||
2547 is_binary_view_like((*arrays)[i]->type()->id())) {
2548 columns_to_encode.push_back(i);
2549 }
2550 }
2551 }
2552 return OptionalParallelFor(options.use_threads,
2553 static_cast<int>(columns_to_encode.size()), EncodeColumn);
2554}
2555
2556} // namespace
2557

Callers 1

ConvertTableToPandasFunction · 0.85

Calls 14

is_base_binary_likeFunction · 0.85
is_binary_view_likeFunction · 0.85
OptionalParallelForFunction · 0.85
chunked_arrayMethod · 0.80
WithTypeMethod · 0.80
HasCategoricalColumnsMethod · 0.80
IsCategoricalColumnMethod · 0.80
push_backMethod · 0.80
InvalidFunction · 0.50
OKFunction · 0.50
typeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected