numdaplot 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- numdaplot/__init__.py +506 -0
- numdaplot/arrays/__init__.py +5 -0
- numdaplot/arrays/array.py +92 -0
- numdaplot/arrays/array_arithmetic.py +404 -0
- numdaplot/arrays/array_calculation.py +143 -0
- numdaplot/arrays/array_conversion.py +150 -0
- numdaplot/arrays/array_creation.py +371 -0
- numdaplot/arrays/array_data.py +281 -0
- numdaplot/arrays/array_layout.py +179 -0
- numdaplot/arrays/array_logic.py +227 -0
- numdaplot/arrays/array_reflected_arithmetic.py +334 -0
- numdaplot/arrays/array_refusals.py +339 -0
- numdaplot/arrays/array_selection.py +195 -0
- numdaplot/arrays/array_sorting.py +59 -0
- numdaplot/arrays/axis_number.py +58 -0
- numdaplot/arrays/calculation/__init__.py +5 -0
- numdaplot/arrays/calculation/counting_statistics.py +325 -0
- numdaplot/arrays/calculation/location_statistics.py +268 -0
- numdaplot/arrays/calculation/math_function_values.py +183 -0
- numdaplot/arrays/calculation/statistic_values.py +209 -0
- numdaplot/arrays/calculation/time_function_values.py +419 -0
- numdaplot/arrays/conversion/__init__.py +5 -0
- numdaplot/arrays/conversion/array_text.py +62 -0
- numdaplot/arrays/conversion/equality_check.py +72 -0
- numdaplot/arrays/conversion/python_values.py +70 -0
- numdaplot/arrays/conversion/time_text.py +290 -0
- numdaplot/arrays/creation/__init__.py +5 -0
- numdaplot/arrays/creation/date_parts.py +89 -0
- numdaplot/arrays/creation/date_parts_values.py +437 -0
- numdaplot/arrays/creation/distribution.py +54 -0
- numdaplot/arrays/creation/filled_values.py +58 -0
- numdaplot/arrays/creation/list_conversion.py +311 -0
- numdaplot/arrays/creation/list_shape.py +97 -0
- numdaplot/arrays/creation/normal.py +65 -0
- numdaplot/arrays/creation/numpy_conversion.py +149 -0
- numdaplot/arrays/creation/random_integers.py +104 -0
- numdaplot/arrays/creation/random_values.py +97 -0
- numdaplot/arrays/creation/range_values.py +73 -0
- numdaplot/arrays/creation/spacing.py +84 -0
- numdaplot/arrays/creation/spacing_values.py +63 -0
- numdaplot/arrays/creation/uniform.py +63 -0
- numdaplot/arrays/equality.py +68 -0
- numdaplot/arrays/layout/__init__.py +5 -0
- numdaplot/arrays/layout/sorting_values.py +113 -0
- numdaplot/arrays/layout/unique_values.py +49 -0
- numdaplot/arrays/mapping/__init__.py +5 -0
- numdaplot/arrays/mapping/mapped_values.py +286 -0
- numdaplot/arrays/mapping/unmatched.py +50 -0
- numdaplot/arrays/mapping/value_change.py +55 -0
- numdaplot/arrays/mapping/value_mapping.py +161 -0
- numdaplot/arrays/math_functions/__init__.py +5 -0
- numdaplot/arrays/math_functions/absolute.py +27 -0
- numdaplot/arrays/math_functions/cosine.py +28 -0
- numdaplot/arrays/math_functions/exponential.py +27 -0
- numdaplot/arrays/math_functions/logarithm.py +72 -0
- numdaplot/arrays/math_functions/math_function.py +58 -0
- numdaplot/arrays/math_functions/round.py +58 -0
- numdaplot/arrays/math_functions/sine.py +28 -0
- numdaplot/arrays/math_functions/square_root.py +27 -0
- numdaplot/arrays/operations/__init__.py +5 -0
- numdaplot/arrays/operations/boolean_operands.py +48 -0
- numdaplot/arrays/operations/combination.py +157 -0
- numdaplot/arrays/operations/float_errors.py +170 -0
- numdaplot/arrays/operations/integer_bounds.py +175 -0
- numdaplot/arrays/operations/integer_rules.py +397 -0
- numdaplot/arrays/operations/operand.py +139 -0
- numdaplot/arrays/operations/time_arithmetic.py +479 -0
- numdaplot/arrays/operations/time_bounds.py +286 -0
- numdaplot/arrays/operations/time_result_bounds.py +397 -0
- numdaplot/arrays/operations/transformation.py +54 -0
- numdaplot/arrays/operations/type_requirements.py +94 -0
- numdaplot/arrays/replacement.py +66 -0
- numdaplot/arrays/selection/__init__.py +5 -0
- numdaplot/arrays/selection/comparison_masks.py +131 -0
- numdaplot/arrays/selection/membership_masks.py +118 -0
- numdaplot/arrays/selection/missing_mask.py +50 -0
- numdaplot/arrays/selection/region_index.py +178 -0
- numdaplot/arrays/selection/replaced_values.py +120 -0
- numdaplot/arrays/selection/rule_mask.py +83 -0
- numdaplot/arrays/selection/time_reference.py +172 -0
- numdaplot/arrays/shape.py +74 -0
- numdaplot/arrays/type_match.py +51 -0
- numdaplot/data_types/__init__.py +5 -0
- numdaplot/data_types/library.py +57 -0
- numdaplot/data_types/numpy_mapping.py +207 -0
- numdaplot/data_types/pandas_mapping.py +114 -0
- numdaplot/data_types/time_of_day.py +292 -0
- numdaplot/data_types/type.py +224 -0
- numdaplot/data_types/value_family.py +149 -0
- numdaplot/data_types/value_type.py +147 -0
- numdaplot/dates/__init__.py +5 -0
- numdaplot/dates/custom_date_format.py +83 -0
- numdaplot/dates/date_format.py +120 -0
- numdaplot/dates/date_part.py +59 -0
- numdaplot/dates/date_part_unit.py +153 -0
- numdaplot/dates/date_period.py +57 -0
- numdaplot/dates/duration_in.py +58 -0
- numdaplot/dates/duration_unit.py +90 -0
- numdaplot/dates/period_unit.py +101 -0
- numdaplot/dates/time_function.py +56 -0
- numdaplot/dates/time_zone.py +68 -0
- numdaplot/dates/time_zone_change.py +71 -0
- numdaplot/dates/time_zone_mode.py +81 -0
- numdaplot/dates/to_duration.py +58 -0
- numdaplot/errors/__init__.py +7 -0
- numdaplot/errors/broadcast_warning.py +36 -0
- numdaplot/errors/calculation_warning.py +35 -0
- numdaplot/errors/cell_out_of_range_error.py +77 -0
- numdaplot/errors/column_not_found_error.py +64 -0
- numdaplot/errors/conflicting_settings_error.py +60 -0
- numdaplot/errors/dimension_error.py +62 -0
- numdaplot/errors/display_warning.py +32 -0
- numdaplot/errors/duplicate_column_error.py +82 -0
- numdaplot/errors/duplicate_label_error.py +55 -0
- numdaplot/errors/duplicate_statistic_error.py +55 -0
- numdaplot/errors/duplicate_value_error.py +54 -0
- numdaplot/errors/empty_array_error.py +55 -0
- numdaplot/errors/empty_list_error.py +52 -0
- numdaplot/errors/empty_region_error.py +34 -0
- numdaplot/errors/empty_text_error.py +34 -0
- numdaplot/errors/empty_total_error.py +62 -0
- numdaplot/errors/empty_values_error.py +34 -0
- numdaplot/errors/file_access_error.py +70 -0
- numdaplot/errors/file_exists_error.py +62 -0
- numdaplot/errors/file_not_found_error.py +56 -0
- numdaplot/errors/incompatible_charts_error.py +80 -0
- numdaplot/errors/incompatible_types_error.py +104 -0
- numdaplot/errors/integer_overflow_error.py +61 -0
- numdaplot/errors/invalid_base_error.py +52 -0
- numdaplot/errors/invalid_bin_width_error.py +66 -0
- numdaplot/errors/invalid_bounds_error.py +58 -0
- numdaplot/errors/invalid_chart_data_error.py +81 -0
- numdaplot/errors/invalid_color_count_error.py +63 -0
- numdaplot/errors/invalid_color_error.py +51 -0
- numdaplot/errors/invalid_column_name_error.py +52 -0
- numdaplot/errors/invalid_conversion_error.py +119 -0
- numdaplot/errors/invalid_count_error.py +61 -0
- numdaplot/errors/invalid_date_format_error.py +51 -0
- numdaplot/errors/invalid_deviation_error.py +52 -0
- numdaplot/errors/invalid_fraction_error.py +51 -0
- numdaplot/errors/invalid_label_count_error.py +61 -0
- numdaplot/errors/invalid_limits_error.py +111 -0
- numdaplot/errors/invalid_opacity_error.py +52 -0
- numdaplot/errors/invalid_point_size_error.py +52 -0
- numdaplot/errors/invalid_position_error.py +106 -0
- numdaplot/errors/invalid_resolution_error.py +51 -0
- numdaplot/errors/invalid_rotation_error.py +53 -0
- numdaplot/errors/invalid_seed_error.py +53 -0
- numdaplot/errors/invalid_separator_error.py +52 -0
- numdaplot/errors/invalid_shape_error.py +52 -0
- numdaplot/errors/invalid_sheet_name_error.py +54 -0
- numdaplot/errors/invalid_size_error.py +58 -0
- numdaplot/errors/invalid_step_error.py +77 -0
- numdaplot/errors/invalid_suffixes_error.py +61 -0
- numdaplot/errors/invalid_time_zone_change_error.py +63 -0
- numdaplot/errors/invalid_type_error.py +79 -0
- numdaplot/errors/irregular_list_error.py +36 -0
- numdaplot/errors/join_relation_error.py +183 -0
- numdaplot/errors/missing_dependency_error.py +58 -0
- numdaplot/errors/missing_type_error.py +36 -0
- numdaplot/errors/missing_value_error.py +62 -0
- numdaplot/errors/not_single_value_error.py +53 -0
- numdaplot/errors/numdaplot_error.py +25 -0
- numdaplot/errors/numdaplot_warning.py +34 -0
- numdaplot/errors/occupied_cell_error.py +63 -0
- numdaplot/errors/out_of_domain_error.py +70 -0
- numdaplot/errors/readability_warning.py +35 -0
- numdaplot/errors/refused_operation_error.py +64 -0
- numdaplot/errors/refused_setting_error.py +60 -0
- numdaplot/errors/rejected_dates.py +60 -0
- numdaplot/errors/repeated_key.py +36 -0
- numdaplot/errors/shape_mismatch_error.py +67 -0
- numdaplot/errors/time_overflow_error.py +131 -0
- numdaplot/errors/time_zone_mismatch_error.py +83 -0
- numdaplot/errors/unknown_time_zone_error.py +51 -0
- numdaplot/errors/unmatched_value_error.py +81 -0
- numdaplot/errors/unsupported_image_format_error.py +56 -0
- numdaplot/errors/unsupported_index_error.py +38 -0
- numdaplot/errors/unsupported_missing_error.py +129 -0
- numdaplot/errors/unsupported_type_error.py +62 -0
- numdaplot/errors/value_conversion_error.py +215 -0
- numdaplot/ordering/__init__.py +5 -0
- numdaplot/ordering/missing_position.py +46 -0
- numdaplot/ordering/order.py +46 -0
- numdaplot/package_version.py +36 -0
- numdaplot/plots/__init__.py +5 -0
- numdaplot/plots/chart_layer.py +47 -0
- numdaplot/plots/charts/__init__.py +5 -0
- numdaplot/plots/charts/bar_chart.py +98 -0
- numdaplot/plots/charts/bar_layout.py +58 -0
- numdaplot/plots/charts/bin_count.py +61 -0
- numdaplot/plots/charts/bin_width.py +78 -0
- numdaplot/plots/charts/box_chart.py +97 -0
- numdaplot/plots/charts/cell_values.py +61 -0
- numdaplot/plots/charts/chart.py +59 -0
- numdaplot/plots/charts/chart_settings.py +105 -0
- numdaplot/plots/charts/color_scale.py +147 -0
- numdaplot/plots/charts/heatmap_chart.py +92 -0
- numdaplot/plots/charts/histogram_chart.py +93 -0
- numdaplot/plots/charts/line_chart.py +100 -0
- numdaplot/plots/charts/line_type.py +75 -0
- numdaplot/plots/charts/marker_shape.py +113 -0
- numdaplot/plots/charts/missing_chart.py +60 -0
- numdaplot/plots/charts/missing_map_chart.py +27 -0
- numdaplot/plots/charts/orientation.py +58 -0
- numdaplot/plots/charts/outliers.py +49 -0
- numdaplot/plots/charts/percentages.py +55 -0
- numdaplot/plots/charts/pie_chart.py +87 -0
- numdaplot/plots/charts/scatter_chart.py +159 -0
- numdaplot/plots/charts/value_axis.py +66 -0
- numdaplot/plots/data/__init__.py +5 -0
- numdaplot/plots/data/array_values.py +128 -0
- numdaplot/plots/data/chart_data.py +143 -0
- numdaplot/plots/data/chart_values.py +109 -0
- numdaplot/plots/data/column_reading.py +468 -0
- numdaplot/plots/data/heatmap_values.py +63 -0
- numdaplot/plots/data/missing_cells.py +165 -0
- numdaplot/plots/data/pie_values.py +215 -0
- numdaplot/plots/data/point_values.py +249 -0
- numdaplot/plots/data/position_kind.py +83 -0
- numdaplot/plots/data/renamed_layers.py +340 -0
- numdaplot/plots/data/sample_values.py +160 -0
- numdaplot/plots/data/shown_columns.py +248 -0
- numdaplot/plots/data/table_values.py +256 -0
- numdaplot/plots/data/unique_labels.py +45 -0
- numdaplot/plots/drawing/__init__.py +5 -0
- numdaplot/plots/drawing/bar_drawing.py +316 -0
- numdaplot/plots/drawing/box_drawing.py +344 -0
- numdaplot/plots/drawing/cell_merging.py +237 -0
- numdaplot/plots/drawing/chart_texts.py +124 -0
- numdaplot/plots/drawing/color_bar.py +57 -0
- numdaplot/plots/drawing/color_scale_values.py +120 -0
- numdaplot/plots/drawing/default_labels.py +41 -0
- numdaplot/plots/drawing/drawn_chart.py +50 -0
- numdaplot/plots/drawing/grid_axes.py +75 -0
- numdaplot/plots/drawing/heatmap_drawing.py +313 -0
- numdaplot/plots/drawing/histogram_drawing.py +350 -0
- numdaplot/plots/drawing/label_room.py +344 -0
- numdaplot/plots/drawing/label_thinning.py +216 -0
- numdaplot/plots/drawing/layer_alignment.py +319 -0
- numdaplot/plots/drawing/layer_colors.py +123 -0
- numdaplot/plots/drawing/line_drawing.py +85 -0
- numdaplot/plots/drawing/marker_codes.py +20 -0
- numdaplot/plots/drawing/missing_drawing.py +360 -0
- numdaplot/plots/drawing/moment_period_formatter.py +253 -0
- numdaplot/plots/drawing/pie_drawing.py +185 -0
- numdaplot/plots/drawing/plot_axes.py +38 -0
- numdaplot/plots/drawing/plot_drawing.py +288 -0
- numdaplot/plots/drawing/plot_theme.py +45 -0
- numdaplot/plots/drawing/position_axis.py +278 -0
- numdaplot/plots/drawing/scatter_drawing.py +364 -0
- numdaplot/plots/drawing/series_colors.py +177 -0
- numdaplot/plots/drawing/size_inches.py +45 -0
- numdaplot/plots/drawing/style_drawing.py +410 -0
- numdaplot/plots/drawing/text_contrast.py +44 -0
- numdaplot/plots/drawing/tick_rotation.py +354 -0
- numdaplot/plots/drawing/time_axis.py +212 -0
- numdaplot/plots/drawing/whole_numbers.py +72 -0
- numdaplot/plots/figure/__init__.py +5 -0
- numdaplot/plots/figure/cell.py +95 -0
- numdaplot/plots/figure/figure.py +256 -0
- numdaplot/plots/figure/figure_drawing.py +99 -0
- numdaplot/plots/figure/figure_style.py +60 -0
- numdaplot/plots/figure/layout.py +71 -0
- numdaplot/plots/figure/placement.py +150 -0
- numdaplot/plots/layer_reading.py +166 -0
- numdaplot/plots/output/__init__.py +5 -0
- numdaplot/plots/output/image_saving.py +187 -0
- numdaplot/plots/output/plot_display.py +181 -0
- numdaplot/plots/output/shown_object.py +45 -0
- numdaplot/plots/overlay_checks.py +245 -0
- numdaplot/plots/plot.py +31 -0
- numdaplot/plots/plot_data.py +140 -0
- numdaplot/plots/plot_distribution_creation.py +237 -0
- numdaplot/plots/plot_output.py +124 -0
- numdaplot/plots/plot_overlays.py +273 -0
- numdaplot/plots/plot_overview_creation.py +195 -0
- numdaplot/plots/plot_series_creation.py +213 -0
- numdaplot/plots/style/__init__.py +5 -0
- numdaplot/plots/style/axis_settings.py +60 -0
- numdaplot/plots/style/color.py +168 -0
- numdaplot/plots/style/custom_color.py +65 -0
- numdaplot/plots/style/grid_lines.py +49 -0
- numdaplot/plots/style/image_options.py +71 -0
- numdaplot/plots/style/legend_position.py +149 -0
- numdaplot/plots/style/plot_style.py +136 -0
- numdaplot/plots/style/size.py +70 -0
- numdaplot/plots/style/size_unit.py +62 -0
- numdaplot/positions/__init__.py +5 -0
- numdaplot/positions/axis.py +54 -0
- numdaplot/positions/index.py +51 -0
- numdaplot/positions/range.py +90 -0
- numdaplot/positions/region.py +92 -0
- numdaplot/py.typed +0 -0
- numdaplot/ratios/__init__.py +5 -0
- numdaplot/ratios/fraction.py +40 -0
- numdaplot/ratios/measure.py +48 -0
- numdaplot/rules/__init__.py +5 -0
- numdaplot/rules/between.py +78 -0
- numdaplot/rules/bounds.py +83 -0
- numdaplot/rules/case.py +48 -0
- numdaplot/rules/contains.py +63 -0
- numdaplot/rules/equal.py +43 -0
- numdaplot/rules/greater.py +39 -0
- numdaplot/rules/greater_or_equal.py +38 -0
- numdaplot/rules/is_in.py +67 -0
- numdaplot/rules/is_missing.py +25 -0
- numdaplot/rules/is_present.py +25 -0
- numdaplot/rules/less.py +39 -0
- numdaplot/rules/less_or_equal.py +38 -0
- numdaplot/rules/not_equal.py +45 -0
- numdaplot/rules/rule.py +62 -0
- numdaplot/rules/rule_values.py +44 -0
- numdaplot/rules/value_rule.py +110 -0
- numdaplot/settings/__init__.py +5 -0
- numdaplot/settings/argument_types.py +327 -0
- numdaplot/settings/field_types.py +593 -0
- numdaplot/statistics/__init__.py +5 -0
- numdaplot/statistics/count.py +71 -0
- numdaplot/statistics/count_distinct.py +27 -0
- numdaplot/statistics/counted_missing.py +46 -0
- numdaplot/statistics/maximum.py +27 -0
- numdaplot/statistics/mean.py +27 -0
- numdaplot/statistics/median.py +27 -0
- numdaplot/statistics/minimum.py +27 -0
- numdaplot/statistics/most_frequent.py +27 -0
- numdaplot/statistics/most_frequent_count.py +27 -0
- numdaplot/statistics/quantile.py +61 -0
- numdaplot/statistics/standard_deviation.py +29 -0
- numdaplot/statistics/statistic.py +63 -0
- numdaplot/statistics/sum.py +27 -0
- numdaplot/tables/__init__.py +5 -0
- numdaplot/tables/aggregation/__init__.py +5 -0
- numdaplot/tables/aggregation/aggregated_frame.py +189 -0
- numdaplot/tables/aggregation/aggregation.py +97 -0
- numdaplot/tables/aggregation/calculation.py +123 -0
- numdaplot/tables/aggregation/result_column.py +108 -0
- numdaplot/tables/aggregation/row_groups.py +96 -0
- numdaplot/tables/aggregation/statistic_name.py +122 -0
- numdaplot/tables/columns/__init__.py +5 -0
- numdaplot/tables/columns/added_column.py +89 -0
- numdaplot/tables/columns/boolean_conversion.py +144 -0
- numdaplot/tables/columns/boolean_rule.py +59 -0
- numdaplot/tables/columns/bracket_end.py +50 -0
- numdaplot/tables/columns/bracket_names.py +346 -0
- numdaplot/tables/columns/bracketed_column.py +179 -0
- numdaplot/tables/columns/brackets.py +234 -0
- numdaplot/tables/columns/chosen_columns.py +55 -0
- numdaplot/tables/columns/column_choice.py +84 -0
- numdaplot/tables/columns/column_mode.py +64 -0
- numdaplot/tables/columns/column_names.py +186 -0
- numdaplot/tables/columns/conversion.py +103 -0
- numdaplot/tables/columns/converted_column.py +669 -0
- numdaplot/tables/columns/date_conversion.py +526 -0
- numdaplot/tables/columns/date_range.py +135 -0
- numdaplot/tables/columns/name_change.py +67 -0
- numdaplot/tables/columns/new_column.py +79 -0
- numdaplot/tables/columns/number_conversion.py +281 -0
- numdaplot/tables/columns/renamed_columns.py +60 -0
- numdaplot/tables/columns/renaming.py +81 -0
- numdaplot/tables/columns/text_conversion.py +70 -0
- numdaplot/tables/columns/time_conversion.py +313 -0
- numdaplot/tables/columns/time_zone_conversion.py +128 -0
- numdaplot/tables/conflict.py +68 -0
- numdaplot/tables/description/__init__.py +5 -0
- numdaplot/tables/description/described_frame.py +335 -0
- numdaplot/tables/description/description.py +155 -0
- numdaplot/tables/duplicates/__init__.py +5 -0
- numdaplot/tables/duplicates/deduplicated_frame.py +66 -0
- numdaplot/tables/duplicates/deduplication.py +88 -0
- numdaplot/tables/duplicates/keep.py +81 -0
- numdaplot/tables/files/__init__.py +5 -0
- numdaplot/tables/files/column_names.py +60 -0
- numdaplot/tables/files/csv_file.py +265 -0
- numdaplot/tables/files/csv_read_options.py +89 -0
- numdaplot/tables/files/csv_separator.py +41 -0
- numdaplot/tables/files/csv_write_options.py +79 -0
- numdaplot/tables/files/decimal_count.py +42 -0
- numdaplot/tables/files/encoding.py +82 -0
- numdaplot/tables/files/excel_file.py +171 -0
- numdaplot/tables/files/excel_read_options.py +79 -0
- numdaplot/tables/files/excel_sheet.py +50 -0
- numdaplot/tables/files/excel_time_cells.py +146 -0
- numdaplot/tables/files/excel_write_options.py +63 -0
- numdaplot/tables/files/file_access.py +152 -0
- numdaplot/tables/files/file_paths.py +106 -0
- numdaplot/tables/files/json_decimals.py +387 -0
- numdaplot/tables/files/json_file.py +203 -0
- numdaplot/tables/files/json_layout.py +63 -0
- numdaplot/tables/files/json_read_options.py +64 -0
- numdaplot/tables/files/json_write_options.py +71 -0
- numdaplot/tables/files/missing_texts.py +63 -0
- numdaplot/tables/files/optional_package.py +42 -0
- numdaplot/tables/files/pandas_backend.py +11 -0
- numdaplot/tables/files/parquet_file.py +91 -0
- numdaplot/tables/files/parquet_read_options.py +56 -0
- numdaplot/tables/files/sas_file.py +94 -0
- numdaplot/tables/files/sas_read_options.py +67 -0
- numdaplot/tables/files/stata_file.py +83 -0
- numdaplot/tables/files/stata_read_options.py +56 -0
- numdaplot/tables/files/xpt_read_options.py +65 -0
- numdaplot/tables/filtering/__init__.py +5 -0
- numdaplot/tables/filtering/checked_frame.py +60 -0
- numdaplot/tables/filtering/column_mask.py +71 -0
- numdaplot/tables/filtering/column_match.py +62 -0
- numdaplot/tables/filtering/condition.py +94 -0
- numdaplot/tables/filtering/filter.py +74 -0
- numdaplot/tables/filtering/filter_mode.py +67 -0
- numdaplot/tables/filtering/row_mask.py +152 -0
- numdaplot/tables/filtering/rule_moments.py +164 -0
- numdaplot/tables/frames/__init__.py +5 -0
- numdaplot/tables/frames/array_frame.py +95 -0
- numdaplot/tables/frames/cleaned_names.py +132 -0
- numdaplot/tables/frames/column.py +15 -0
- numdaplot/tables/frames/column_values.py +273 -0
- numdaplot/tables/frames/frame_equality.py +130 -0
- numdaplot/tables/frames/frame_normalization.py +459 -0
- numdaplot/tables/frames/named_column_errors.py +85 -0
- numdaplot/tables/frames/pandas_decimals.py +113 -0
- numdaplot/tables/frames/region_positions.py +113 -0
- numdaplot/tables/frames/table_text.py +222 -0
- numdaplot/tables/frames/time_columns.py +345 -0
- numdaplot/tables/frames/time_range_errors.py +117 -0
- numdaplot/tables/frames/time_zones.py +271 -0
- numdaplot/tables/joining/__init__.py +5 -0
- numdaplot/tables/joining/join.py +110 -0
- numdaplot/tables/joining/join_keys.py +367 -0
- numdaplot/tables/joining/join_mode.py +93 -0
- numdaplot/tables/joining/join_relation.py +149 -0
- numdaplot/tables/joining/join_suffixes.py +71 -0
- numdaplot/tables/joining/joined_frame.py +166 -0
- numdaplot/tables/joining/joined_names.py +107 -0
- numdaplot/tables/joining/joined_rows.py +235 -0
- numdaplot/tables/joining/key_types.py +57 -0
- numdaplot/tables/joining/relation.py +78 -0
- numdaplot/tables/missing/__init__.py +5 -0
- numdaplot/tables/missing/missing_count.py +59 -0
- numdaplot/tables/missing/missing_counts.py +214 -0
- numdaplot/tables/missing/missing_drop.py +98 -0
- numdaplot/tables/missing/missing_mode.py +63 -0
- numdaplot/tables/missing/missing_ratio.py +71 -0
- numdaplot/tables/missing/missing_removal.py +257 -0
- numdaplot/tables/missing/missing_summary.py +174 -0
- numdaplot/tables/missing/ratio_comparison.py +70 -0
- numdaplot/tables/pivot/__init__.py +5 -0
- numdaplot/tables/pivot/pivot_table.py +104 -0
- numdaplot/tables/pivot/pivoted_frame.py +244 -0
- numdaplot/tables/preview/__init__.py +5 -0
- numdaplot/tables/preview/notebook_display.py +238 -0
- numdaplot/tables/preview/preview.py +100 -0
- numdaplot/tables/preview/preview_rows.py +55 -0
- numdaplot/tables/preview/shown_columns.py +62 -0
- numdaplot/tables/preview/side.py +82 -0
- numdaplot/tables/sorting/__init__.py +5 -0
- numdaplot/tables/sorting/sort_key.py +71 -0
- numdaplot/tables/sorting/sorted_frame.py +81 -0
- numdaplot/tables/sorting/sorting.py +82 -0
- numdaplot/tables/table.py +71 -0
- numdaplot/tables/table_calculation.py +172 -0
- numdaplot/tables/table_columns.py +214 -0
- numdaplot/tables/table_conversion.py +351 -0
- numdaplot/tables/table_data.py +321 -0
- numdaplot/tables/table_display.py +56 -0
- numdaplot/tables/table_joining.py +80 -0
- numdaplot/tables/table_layout.py +105 -0
- numdaplot/tables/table_missing.py +146 -0
- numdaplot/tables/table_reading.py +451 -0
- numdaplot/tables/table_refusals.py +295 -0
- numdaplot/tables/table_selection.py +163 -0
- numdaplot/tables/table_writing.py +269 -0
- numdaplot-0.1.0.dist-info/METADATA +176 -0
- numdaplot-0.1.0.dist-info/RECORD +474 -0
- numdaplot-0.1.0.dist-info/WHEEL +4 -0
- numdaplot-0.1.0.dist-info/licenses/LICENSE +28 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Column operations of a Table: choice, renaming, conversion and addition.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Self
|
|
8
|
+
|
|
9
|
+
from numdaplot.settings.argument_types import checked_arguments
|
|
10
|
+
from numdaplot.tables.columns.added_column import add_frame_column
|
|
11
|
+
from numdaplot.tables.columns.chosen_columns import choose_frame_columns
|
|
12
|
+
from numdaplot.tables.columns.column_choice import ColumnChoice
|
|
13
|
+
from numdaplot.tables.columns.conversion import Conversion
|
|
14
|
+
from numdaplot.tables.columns.converted_column import convert_column
|
|
15
|
+
from numdaplot.tables.columns.new_column import NewColumn
|
|
16
|
+
from numdaplot.tables.columns.renamed_columns import rename_frame_columns
|
|
17
|
+
from numdaplot.tables.columns.renaming import Renaming
|
|
18
|
+
from numdaplot.tables.frames.named_column_errors import NamedColumnErrors
|
|
19
|
+
from numdaplot.tables.table_data import TableData
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TableColumns(TableData):
|
|
23
|
+
"""
|
|
24
|
+
Column operations of a Table: ``choose_columns``, ``rename``, ``convert`` and ``add_column``.
|
|
25
|
+
|
|
26
|
+
.. versionadded:: 0.1.0
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
@checked_arguments
|
|
30
|
+
def choose_columns(self, choice: ColumnChoice) -> Self:
|
|
31
|
+
"""
|
|
32
|
+
Return the Table with only some columns, or without some columns.
|
|
33
|
+
|
|
34
|
+
.. versionadded:: 0.1.0
|
|
35
|
+
|
|
36
|
+
Parameters
|
|
37
|
+
----------
|
|
38
|
+
choice
|
|
39
|
+
The columns, and whether to keep them, in the order of the list, or to drop them.
|
|
40
|
+
|
|
41
|
+
Returns
|
|
42
|
+
-------
|
|
43
|
+
Self
|
|
44
|
+
A new Table.
|
|
45
|
+
|
|
46
|
+
Raises
|
|
47
|
+
------
|
|
48
|
+
InvalidTypeError
|
|
49
|
+
When an argument is not of the type its annotation names.
|
|
50
|
+
ColumnNotFoundError
|
|
51
|
+
When a named column does not exist.
|
|
52
|
+
|
|
53
|
+
Examples
|
|
54
|
+
--------
|
|
55
|
+
>>> import numdaplot as ndp
|
|
56
|
+
>>> cities = ndp.Array.from_list(["Paris"])
|
|
57
|
+
>>> prices = ndp.Array.from_list([1.5])
|
|
58
|
+
>>> table = ndp.Table.from_arrays({"city": cities, "price": prices})
|
|
59
|
+
>>> table.choose_columns(ndp.ColumnChoice(columns=["city"], mode=ndp.ColumnMode.DROP)).column_names
|
|
60
|
+
['price']
|
|
61
|
+
"""
|
|
62
|
+
chosen_frame = choose_frame_columns(self._frame, choice)
|
|
63
|
+
chosen_table = self._wrap(chosen_frame)
|
|
64
|
+
|
|
65
|
+
return chosen_table
|
|
66
|
+
|
|
67
|
+
@checked_arguments
|
|
68
|
+
def rename(self, renaming: Renaming) -> Self:
|
|
69
|
+
"""
|
|
70
|
+
Return the Table with renamed columns, every renaming applied at once.
|
|
71
|
+
|
|
72
|
+
Two columns can swap their names in a single call.
|
|
73
|
+
|
|
74
|
+
.. versionadded:: 0.1.0
|
|
75
|
+
|
|
76
|
+
Parameters
|
|
77
|
+
----------
|
|
78
|
+
renaming
|
|
79
|
+
The ``NameChange`` of each renamed column.
|
|
80
|
+
|
|
81
|
+
Returns
|
|
82
|
+
-------
|
|
83
|
+
Self
|
|
84
|
+
A new Table, columns in the same order.
|
|
85
|
+
|
|
86
|
+
Raises
|
|
87
|
+
------
|
|
88
|
+
InvalidTypeError
|
|
89
|
+
When an argument is not of the type its annotation names.
|
|
90
|
+
ColumnNotFoundError
|
|
91
|
+
When a renamed column does not exist.
|
|
92
|
+
DuplicateColumnError
|
|
93
|
+
When a new name is the name of a column kept as it is.
|
|
94
|
+
|
|
95
|
+
Examples
|
|
96
|
+
--------
|
|
97
|
+
>>> import numdaplot as ndp
|
|
98
|
+
>>> table = ndp.Table.from_arrays({"prix": ndp.Array.from_list([1.5])})
|
|
99
|
+
>>> table.rename(ndp.Renaming(changes=[ndp.NameChange(old_name="prix", new_name="price")])).column_names
|
|
100
|
+
['price']
|
|
101
|
+
"""
|
|
102
|
+
renamed_frame = rename_frame_columns(self._frame, renaming)
|
|
103
|
+
renamed_table = self._wrap(renamed_frame)
|
|
104
|
+
|
|
105
|
+
return renamed_table
|
|
106
|
+
|
|
107
|
+
@checked_arguments
|
|
108
|
+
def convert(self, conversion: Conversion) -> Self:
|
|
109
|
+
"""
|
|
110
|
+
Return the Table with a column converted to another type, missing values staying missing.
|
|
111
|
+
|
|
112
|
+
.. versionadded:: 0.1.0
|
|
113
|
+
|
|
114
|
+
Parameters
|
|
115
|
+
----------
|
|
116
|
+
conversion
|
|
117
|
+
The column, its new type, and the date format or the time zone change. Accepted: between number
|
|
118
|
+
types, from numbers, booleans, categories, dates, datetimes and durations to texts, from texts and
|
|
119
|
+
categories to numbers, booleans (``"true"`` or ``"false"`` in any case), dates or datetimes, from any
|
|
120
|
+
other type to categories, between dates and datetimes, and a time zone change of datetimes.
|
|
121
|
+
|
|
122
|
+
Returns
|
|
123
|
+
-------
|
|
124
|
+
Self
|
|
125
|
+
A new Table, the column at its place.
|
|
126
|
+
|
|
127
|
+
Raises
|
|
128
|
+
------
|
|
129
|
+
InvalidTypeError
|
|
130
|
+
When an argument is not of the type its annotation names.
|
|
131
|
+
ColumnNotFoundError
|
|
132
|
+
When the column does not exist.
|
|
133
|
+
IncompatibleTypesError
|
|
134
|
+
When the conversion is not accepted.
|
|
135
|
+
InvalidConversionError
|
|
136
|
+
When the format, the time zone change or the boolean rule does not apply to the conversion.
|
|
137
|
+
InvalidLimitsError
|
|
138
|
+
When ``Brackets`` cut integers and a bracket between two limits holds no integer.
|
|
139
|
+
UnmatchedValueError
|
|
140
|
+
When a number is in no bracket of ``Brackets`` whose ``others`` is ``Unmatched.ERROR``.
|
|
141
|
+
ValueConversionError
|
|
142
|
+
At the first value that cannot be stored in the new type, such as ``"abc"`` read as a number,
|
|
143
|
+
2.5 stored as an integer, 3 read as a boolean with ``ZERO_ONE``, ``"31/02/2026"`` read as a date, or
|
|
144
|
+
``"25:00"`` read as a time of day.
|
|
145
|
+
TimeOverflowError
|
|
146
|
+
When a value converted to ``DATETIME`` is outside 1677 to 2262.
|
|
147
|
+
TimeZoneMismatchError
|
|
148
|
+
When the time zone change does not apply to whether the datetimes have a zone.
|
|
149
|
+
|
|
150
|
+
Examples
|
|
151
|
+
--------
|
|
152
|
+
>>> import numdaplot as ndp
|
|
153
|
+
>>> table = ndp.Table.from_arrays({"zip_code": ndp.Array.from_list(["06000", "75001"])})
|
|
154
|
+
>>> table.convert(ndp.Conversion(column="zip_code", dtype=ndp.Type.INT32))
|
|
155
|
+
zip_code
|
|
156
|
+
INT32
|
|
157
|
+
0 6000
|
|
158
|
+
1 75001
|
|
159
|
+
"""
|
|
160
|
+
column = self._read_column(conversion.column)
|
|
161
|
+
with NamedColumnErrors(column):
|
|
162
|
+
converted_column = convert_column(column, conversion)
|
|
163
|
+
|
|
164
|
+
converted_frame = self._frame.copy(deep=False)
|
|
165
|
+
converted_frame[conversion.column] = converted_column
|
|
166
|
+
converted_table = self._wrap(converted_frame)
|
|
167
|
+
|
|
168
|
+
return converted_table
|
|
169
|
+
|
|
170
|
+
@checked_arguments
|
|
171
|
+
def add_column(self, new_column: NewColumn) -> Self:
|
|
172
|
+
"""
|
|
173
|
+
Return the Table with one more column, or with a column replaced.
|
|
174
|
+
|
|
175
|
+
.. versionadded:: 0.1.0
|
|
176
|
+
|
|
177
|
+
Parameters
|
|
178
|
+
----------
|
|
179
|
+
new_column
|
|
180
|
+
The name, a one-dimensional Array with one value per row, and what to do when the name exists.
|
|
181
|
+
|
|
182
|
+
Returns
|
|
183
|
+
-------
|
|
184
|
+
Self
|
|
185
|
+
A new Table. A new column is placed last; a replaced column keeps its place.
|
|
186
|
+
|
|
187
|
+
Raises
|
|
188
|
+
------
|
|
189
|
+
InvalidTypeError
|
|
190
|
+
When an argument is not of the type its annotation names.
|
|
191
|
+
DimensionError
|
|
192
|
+
When the Array does not have one dimension.
|
|
193
|
+
ShapeMismatchError
|
|
194
|
+
When the Array does not have one value per row.
|
|
195
|
+
DuplicateColumnError
|
|
196
|
+
When the name exists and ``on_conflict`` is ``Conflict.ERROR``.
|
|
197
|
+
TimeOverflowError
|
|
198
|
+
When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
|
|
199
|
+
|
|
200
|
+
Examples
|
|
201
|
+
--------
|
|
202
|
+
>>> import numdaplot as ndp
|
|
203
|
+
>>> table = ndp.Table.from_arrays({"price": ndp.Array.from_list([10.0, 20.0])})
|
|
204
|
+
>>> taxed_prices = table.column("price") * 1.2
|
|
205
|
+
>>> table.add_column(ndp.NewColumn(name="taxed_price", values=taxed_prices))
|
|
206
|
+
price taxed_price
|
|
207
|
+
FLOAT64 FLOAT64
|
|
208
|
+
0 10.0 12.0
|
|
209
|
+
1 20.0 24.0
|
|
210
|
+
"""
|
|
211
|
+
extended_frame = add_frame_column(self._frame, new_column)
|
|
212
|
+
extended_table = self._wrap(extended_frame)
|
|
213
|
+
|
|
214
|
+
return extended_table
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Conversion of a Table to and from pandas, Arrays and Python values.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Self, cast
|
|
10
|
+
|
|
11
|
+
import pandas
|
|
12
|
+
|
|
13
|
+
from numdaplot.arrays.array import Array, create_array
|
|
14
|
+
from numdaplot.arrays.conversion.python_values import to_python_list
|
|
15
|
+
from numdaplot.errors.invalid_type_error import InvalidTypeError
|
|
16
|
+
from numdaplot.errors.not_single_value_error import NotSingleValueError
|
|
17
|
+
from numdaplot.settings.argument_types import checked_arguments
|
|
18
|
+
from numdaplot.tables.files.column_names import ColumnNames
|
|
19
|
+
from numdaplot.tables.frames.array_frame import build_array_frame
|
|
20
|
+
from numdaplot.tables.frames.column_values import convert_column_values, find_column_missing, read_array_values
|
|
21
|
+
from numdaplot.tables.frames.frame_equality import are_frames_equal
|
|
22
|
+
from numdaplot.tables.frames.table_text import format_table
|
|
23
|
+
from numdaplot.tables.frames.time_columns import read_time_objects_frame
|
|
24
|
+
from numdaplot.tables.frames.time_zones import find_column_time_zone
|
|
25
|
+
from numdaplot.tables.preview.notebook_display import format_table_html
|
|
26
|
+
from numdaplot.tables.preview.shown_columns import ShownColumns
|
|
27
|
+
from numdaplot.tables.table_data import TableData
|
|
28
|
+
|
|
29
|
+
if TYPE_CHECKING:
|
|
30
|
+
from numdaplot.arrays.equality import Equality
|
|
31
|
+
|
|
32
|
+
SINGLE_VALUE_COUNT = 1
|
|
33
|
+
FIRST_POSITION = 0
|
|
34
|
+
EQUALITY_TARGET = "Table.is_equal other"
|
|
35
|
+
EQUALITY_EXPECTED = "a Table"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class TableConversion(TableData):
|
|
39
|
+
"""
|
|
40
|
+
Conversion of a Table to and from pandas, Arrays and Python values.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
@checked_arguments
|
|
47
|
+
def from_pandas(cls, frame: pandas.DataFrame, column_names: ColumnNames = ColumnNames.CLEANED) -> Self:
|
|
48
|
+
"""
|
|
49
|
+
Return a Table holding a copy of a pandas DataFrame; changing the DataFrame never changes the Table.
|
|
50
|
+
|
|
51
|
+
.. versionadded:: 0.1.0
|
|
52
|
+
|
|
53
|
+
Parameters
|
|
54
|
+
----------
|
|
55
|
+
frame
|
|
56
|
+
A pandas DataFrame whose index is the row numbers 0, 1, 2... Python objects become dates, datetimes,
|
|
57
|
+
durations, times of day, integers, decimals or booleans when they all are, and texts otherwise. Durations
|
|
58
|
+
of any unit become ``DURATION``, and ``datetime.time`` objects ``TIME``.
|
|
59
|
+
column_names
|
|
60
|
+
Whether the column names are cleaned, ``ColumnNames.CLEANED`` by default: the spaces, tabs and line breaks
|
|
61
|
+
at the start and the end of each name are removed. ``ColumnNames.KEPT`` keeps the names as written.
|
|
62
|
+
|
|
63
|
+
Returns
|
|
64
|
+
-------
|
|
65
|
+
Self
|
|
66
|
+
A new Table.
|
|
67
|
+
|
|
68
|
+
Raises
|
|
69
|
+
------
|
|
70
|
+
InvalidTypeError
|
|
71
|
+
When an argument is not of the type its annotation names.
|
|
72
|
+
UnsupportedIndexError
|
|
73
|
+
When the index holds other values: call ``reset_index()`` first to keep them as a column.
|
|
74
|
+
InvalidColumnNameError, DuplicateColumnError
|
|
75
|
+
When a column name is not a non-empty text, even once cleaned, or appears twice, or two names become the
|
|
76
|
+
same once cleaned.
|
|
77
|
+
UnsupportedTypeError
|
|
78
|
+
When a column has a type numdaplot does not support, such as complex numbers
|
|
79
|
+
or datetimes with a time zone.
|
|
80
|
+
TimeOverflowError
|
|
81
|
+
When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
|
|
82
|
+
|
|
83
|
+
Examples
|
|
84
|
+
--------
|
|
85
|
+
>>> import pandas
|
|
86
|
+
>>> import numdaplot as ndp
|
|
87
|
+
>>> ndp.Table.from_pandas(pandas.DataFrame({"city": ["Pau", None], "count": [2, 3]}))
|
|
88
|
+
city count
|
|
89
|
+
TEXT INT64
|
|
90
|
+
0 Pau 2
|
|
91
|
+
1 <NA> 3
|
|
92
|
+
"""
|
|
93
|
+
table = cls._from_read_frame(frame, column_names)
|
|
94
|
+
|
|
95
|
+
return table
|
|
96
|
+
|
|
97
|
+
@classmethod
|
|
98
|
+
@checked_arguments
|
|
99
|
+
def from_arrays(cls, columns: dict[str, Array]) -> Self:
|
|
100
|
+
"""
|
|
101
|
+
Return a Table whose columns hold the values of one-dimensional Arrays.
|
|
102
|
+
|
|
103
|
+
.. versionadded:: 0.1.0
|
|
104
|
+
|
|
105
|
+
Parameters
|
|
106
|
+
----------
|
|
107
|
+
columns
|
|
108
|
+
One Array per column, by column name, all of the same length.
|
|
109
|
+
|
|
110
|
+
Returns
|
|
111
|
+
-------
|
|
112
|
+
Self
|
|
113
|
+
A new Table, columns in the order of the dictionary.
|
|
114
|
+
|
|
115
|
+
Raises
|
|
116
|
+
------
|
|
117
|
+
InvalidTypeError
|
|
118
|
+
When an argument is not of the type its annotation names.
|
|
119
|
+
EmptyListError
|
|
120
|
+
When there is no column.
|
|
121
|
+
InvalidColumnNameError
|
|
122
|
+
When a column name is not a non-empty text.
|
|
123
|
+
DimensionError
|
|
124
|
+
When an Array does not have one dimension.
|
|
125
|
+
ShapeMismatchError
|
|
126
|
+
When the Arrays do not have the same length.
|
|
127
|
+
TimeOverflowError
|
|
128
|
+
When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
|
|
129
|
+
|
|
130
|
+
Examples
|
|
131
|
+
--------
|
|
132
|
+
>>> import numdaplot as ndp
|
|
133
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon"])
|
|
134
|
+
>>> prices = ndp.Array.from_list([1.5, 8.0])
|
|
135
|
+
>>> ndp.Table.from_arrays({"city": cities, "price": prices})
|
|
136
|
+
city price
|
|
137
|
+
TEXT FLOAT64
|
|
138
|
+
0 Paris 1.5
|
|
139
|
+
1 Lyon 8.0
|
|
140
|
+
"""
|
|
141
|
+
frame = build_array_frame(columns)
|
|
142
|
+
table = cls._create(frame)
|
|
143
|
+
|
|
144
|
+
return table
|
|
145
|
+
|
|
146
|
+
def to_pandas(self) -> pandas.DataFrame:
|
|
147
|
+
"""
|
|
148
|
+
Return a pandas copy of the Table; changing it never changes the Table.
|
|
149
|
+
|
|
150
|
+
Integers, booleans and texts use the pandas dtypes that accept missing values (``pd.NA``).
|
|
151
|
+
|
|
152
|
+
.. versionadded:: 0.1.0
|
|
153
|
+
|
|
154
|
+
Returns
|
|
155
|
+
-------
|
|
156
|
+
pandas.DataFrame
|
|
157
|
+
A copy, rows numbered from 0. Times of day are ``datetime.time`` objects, as pandas has no type for them.
|
|
158
|
+
|
|
159
|
+
Examples
|
|
160
|
+
--------
|
|
161
|
+
>>> import numdaplot as ndp
|
|
162
|
+
>>> ndp.Table.from_arrays({"count": ndp.Array.from_list([2, 3])}).to_pandas().dtypes.tolist()
|
|
163
|
+
[Int64Dtype()]
|
|
164
|
+
"""
|
|
165
|
+
pandas_frame = read_time_objects_frame(self._frame)
|
|
166
|
+
|
|
167
|
+
return pandas_frame
|
|
168
|
+
|
|
169
|
+
@checked_arguments
|
|
170
|
+
def column(self, column_name: str) -> Array:
|
|
171
|
+
"""
|
|
172
|
+
Return the values of a column as an Array.
|
|
173
|
+
|
|
174
|
+
.. versionadded:: 0.1.0
|
|
175
|
+
|
|
176
|
+
Parameters
|
|
177
|
+
----------
|
|
178
|
+
column_name
|
|
179
|
+
The name of the column.
|
|
180
|
+
|
|
181
|
+
Returns
|
|
182
|
+
-------
|
|
183
|
+
Array
|
|
184
|
+
A one-dimensional Array of the type of the column, with the same number of values as the Table has rows;
|
|
185
|
+
a ``CATEGORY`` column gives a ``TEXT`` Array.
|
|
186
|
+
|
|
187
|
+
Raises
|
|
188
|
+
------
|
|
189
|
+
InvalidTypeError
|
|
190
|
+
When an argument is not of the type its annotation names.
|
|
191
|
+
ColumnNotFoundError
|
|
192
|
+
When no column has this name.
|
|
193
|
+
UnsupportedMissingError
|
|
194
|
+
When an integer or boolean column has missing values, which an Array cannot hold: remove them with
|
|
195
|
+
``drop_missing``, or convert an integer column to ``FLOAT64`` first.
|
|
196
|
+
TimeZoneMismatchError
|
|
197
|
+
When the column holds datetimes with a time zone, which an Array cannot hold: remove the zone first
|
|
198
|
+
with ``TimeZoneMode.REMOVE``.
|
|
199
|
+
|
|
200
|
+
Examples
|
|
201
|
+
--------
|
|
202
|
+
>>> import numdaplot as ndp
|
|
203
|
+
>>> table = ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5, 8.0])})
|
|
204
|
+
>>> table.column("price").compute(ndp.Sum()).to_value()
|
|
205
|
+
9.5
|
|
206
|
+
"""
|
|
207
|
+
column = self._read_column(column_name)
|
|
208
|
+
array_values = read_array_values(column)
|
|
209
|
+
column_array = create_array(array_values)
|
|
210
|
+
|
|
211
|
+
return column_array
|
|
212
|
+
|
|
213
|
+
def to_value(self) -> Any:
|
|
214
|
+
"""
|
|
215
|
+
Return the single value of a Table of one row and one column, as a Python value.
|
|
216
|
+
|
|
217
|
+
.. versionadded:: 0.1.0
|
|
218
|
+
|
|
219
|
+
Returns
|
|
220
|
+
-------
|
|
221
|
+
Any
|
|
222
|
+
The value, ``None`` when it is missing. A datetime with a time zone keeps its zone.
|
|
223
|
+
|
|
224
|
+
Raises
|
|
225
|
+
------
|
|
226
|
+
NotSingleValueError
|
|
227
|
+
When the Table does not hold exactly one value.
|
|
228
|
+
|
|
229
|
+
Examples
|
|
230
|
+
--------
|
|
231
|
+
>>> import numdaplot as ndp
|
|
232
|
+
>>> table = ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5, 8.0])})
|
|
233
|
+
>>> highest_price = ndp.Calculation(column="price", function=ndp.Max())
|
|
234
|
+
>>> table.aggregate(ndp.Aggregation(calculations=[highest_price])).to_value()
|
|
235
|
+
8.0
|
|
236
|
+
"""
|
|
237
|
+
value_count = self.row_count * self.column_count
|
|
238
|
+
if value_count != SINGLE_VALUE_COUNT:
|
|
239
|
+
raise NotSingleValueError(value_count)
|
|
240
|
+
|
|
241
|
+
column = self._frame.iloc[:, FIRST_POSITION]
|
|
242
|
+
missing = find_column_missing(column)
|
|
243
|
+
is_missing = bool(missing[FIRST_POSITION])
|
|
244
|
+
if is_missing:
|
|
245
|
+
return None
|
|
246
|
+
|
|
247
|
+
time_zone = find_column_time_zone(column)
|
|
248
|
+
if time_zone is not None:
|
|
249
|
+
moment = column.iloc[FIRST_POSITION]
|
|
250
|
+
zone_datetime = moment.to_pydatetime()
|
|
251
|
+
return zone_datetime
|
|
252
|
+
|
|
253
|
+
values = convert_column_values(column)
|
|
254
|
+
python_values = to_python_list(values)
|
|
255
|
+
single_value = python_values[FIRST_POSITION]
|
|
256
|
+
|
|
257
|
+
return single_value
|
|
258
|
+
|
|
259
|
+
@checked_arguments
|
|
260
|
+
def is_equal(self, equality: Equality) -> bool:
|
|
261
|
+
"""
|
|
262
|
+
Return whether this Table and another one have the same columns, in the same order, with the same values.
|
|
263
|
+
|
|
264
|
+
Two missing values at the same row are equal. Datetime columns in different time zones are different,
|
|
265
|
+
even for the same instants.
|
|
266
|
+
|
|
267
|
+
.. versionadded:: 0.1.0
|
|
268
|
+
|
|
269
|
+
Parameters
|
|
270
|
+
----------
|
|
271
|
+
equality
|
|
272
|
+
The other Table, and whether the type of each column must also be the same.
|
|
273
|
+
|
|
274
|
+
Returns
|
|
275
|
+
-------
|
|
276
|
+
bool
|
|
277
|
+
True when both Tables are equal.
|
|
278
|
+
|
|
279
|
+
Raises
|
|
280
|
+
------
|
|
281
|
+
InvalidTypeError
|
|
282
|
+
When an argument is not of the type its annotation names.
|
|
283
|
+
|
|
284
|
+
Examples
|
|
285
|
+
--------
|
|
286
|
+
>>> import numdaplot as ndp
|
|
287
|
+
>>> integers = ndp.Table.from_arrays({"count": ndp.Array.from_list([1, 2])})
|
|
288
|
+
>>> decimals = ndp.Table.from_arrays({"count": ndp.Array.from_list([1.0, 2.0])})
|
|
289
|
+
>>> integers.is_equal(ndp.Equality(other=decimals))
|
|
290
|
+
True
|
|
291
|
+
"""
|
|
292
|
+
other = cast(object, equality.other)
|
|
293
|
+
if not isinstance(other, TableData):
|
|
294
|
+
raise InvalidTypeError(EQUALITY_TARGET, EQUALITY_EXPECTED, other)
|
|
295
|
+
|
|
296
|
+
other_frame = other._frame
|
|
297
|
+
is_equal = are_frames_equal(self._frame, other_frame, equality.types)
|
|
298
|
+
|
|
299
|
+
return is_equal
|
|
300
|
+
|
|
301
|
+
def __repr__(self) -> str:
|
|
302
|
+
"""
|
|
303
|
+
Return the text of the Table, with the type of each column under its name.
|
|
304
|
+
|
|
305
|
+
A long Table only shows its first and last rows, as in pandas. Every column is shown, going on after a line
|
|
306
|
+
break, ended by a backslash, when they do not fit in the width of the terminal.
|
|
307
|
+
|
|
308
|
+
.. versionadded:: 0.1.0
|
|
309
|
+
|
|
310
|
+
Returns
|
|
311
|
+
-------
|
|
312
|
+
str
|
|
313
|
+
The text shown by ``print(table)``.
|
|
314
|
+
|
|
315
|
+
Examples
|
|
316
|
+
--------
|
|
317
|
+
>>> import numdaplot as ndp
|
|
318
|
+
>>> print(ndp.Table.from_arrays({"paid": ndp.Array.from_list([True, False])}))
|
|
319
|
+
paid
|
|
320
|
+
BOOL
|
|
321
|
+
0 True
|
|
322
|
+
1 False
|
|
323
|
+
"""
|
|
324
|
+
table_text = format_table(self._frame)
|
|
325
|
+
|
|
326
|
+
return table_text
|
|
327
|
+
|
|
328
|
+
def _repr_html_(self) -> str:
|
|
329
|
+
"""
|
|
330
|
+
Return the HTML table a Jupyter notebook shows for a Table written at the end of a cell.
|
|
331
|
+
|
|
332
|
+
The table is the one of ``preview``: every column, with the type of each column under its name. A long Table
|
|
333
|
+
only shows its first and last rows, as its text does.
|
|
334
|
+
|
|
335
|
+
.. versionadded:: 0.1.0
|
|
336
|
+
|
|
337
|
+
Returns
|
|
338
|
+
-------
|
|
339
|
+
str
|
|
340
|
+
The HTML table, or a note for a Table without rows or without columns.
|
|
341
|
+
|
|
342
|
+
Examples
|
|
343
|
+
--------
|
|
344
|
+
>>> import numdaplot as ndp
|
|
345
|
+
>>> table = ndp.Table.from_arrays({"paid": ndp.Array.from_list([True, False])})
|
|
346
|
+
>>> "BOOL" in table._repr_html_()
|
|
347
|
+
True
|
|
348
|
+
"""
|
|
349
|
+
table_html = format_table_html(self._frame, ShownColumns.ALL)
|
|
350
|
+
|
|
351
|
+
return table_html
|