maxframe 0.1.0b5__cp311-cp311-macosx_11_0_arm64.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.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +32 -0
- maxframe/_utils.cpython-311-darwin.so +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyx +547 -0
- maxframe/codegen.py +528 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +443 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +103 -0
- maxframe/config/tests/test_validators.py +34 -0
- maxframe/config/validators.py +57 -0
- maxframe/conftest.py +139 -0
- maxframe/core/__init__.py +65 -0
- maxframe/core/base.py +156 -0
- maxframe/core/entity/__init__.py +44 -0
- maxframe/core/entity/chunks.py +68 -0
- maxframe/core/entity/core.py +152 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/fuse.py +73 -0
- maxframe/core/entity/objects.py +100 -0
- maxframe/core/entity/output_types.py +90 -0
- maxframe/core/entity/tileables.py +438 -0
- maxframe/core/entity/utils.py +24 -0
- maxframe/core/graph/__init__.py +17 -0
- maxframe/core/graph/builder/__init__.py +16 -0
- maxframe/core/graph/builder/base.py +86 -0
- maxframe/core/graph/builder/chunk.py +430 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +41 -0
- maxframe/core/graph/core.cpython-311-darwin.so +0 -0
- maxframe/core/graph/core.pyx +467 -0
- maxframe/core/graph/entity.py +171 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +34 -0
- maxframe/core/operator/base.py +450 -0
- maxframe/core/operator/core.py +276 -0
- maxframe/core/operator/fetch.py +53 -0
- maxframe/core/operator/fuse.py +29 -0
- maxframe/core/operator/objects.py +72 -0
- maxframe/core/operator/shuffle.py +111 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +81 -0
- maxframe/dataframe/arithmetic/__init__.py +359 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/around.py +152 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +342 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +442 -0
- maxframe/dataframe/arithmetic/equal.py +56 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +57 -0
- maxframe/dataframe/arithmetic/greater_equal.py +57 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +57 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +56 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2417 -0
- maxframe/dataframe/datasource/__init__.py +15 -0
- maxframe/dataframe/datasource/core.py +81 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +504 -0
- maxframe/dataframe/datasource/from_index.py +54 -0
- maxframe/dataframe/datasource/from_records.py +107 -0
- maxframe/dataframe/datasource/from_tensor.py +419 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +528 -0
- maxframe/dataframe/datasource/read_odps_query.py +299 -0
- maxframe/dataframe/datasource/read_odps_table.py +253 -0
- maxframe/dataframe/datasource/read_parquet.py +421 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
- maxframe/dataframe/datastore/__init__.py +26 -0
- maxframe/dataframe/datastore/core.py +19 -0
- maxframe/dataframe/datastore/to_csv.py +227 -0
- maxframe/dataframe/datastore/to_odps.py +162 -0
- maxframe/dataframe/extensions/__init__.py +41 -0
- maxframe/dataframe/extensions/accessor.py +50 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +86 -0
- maxframe/dataframe/groupby/__init__.py +82 -0
- maxframe/dataframe/groupby/aggregation.py +350 -0
- maxframe/dataframe/groupby/apply.py +251 -0
- maxframe/dataframe/groupby/core.py +179 -0
- maxframe/dataframe/groupby/cum.py +124 -0
- maxframe/dataframe/groupby/fill.py +141 -0
- maxframe/dataframe/groupby/getitem.py +92 -0
- maxframe/dataframe/groupby/head.py +105 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
- maxframe/dataframe/groupby/transform.py +255 -0
- maxframe/dataframe/indexing/__init__.py +84 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +349 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/getitem.py +204 -0
- maxframe/dataframe/indexing/iat.py +37 -0
- maxframe/dataframe/indexing/iloc.py +566 -0
- maxframe/dataframe/indexing/insert.py +86 -0
- maxframe/dataframe/indexing/loc.py +411 -0
- maxframe/dataframe/indexing/reindex.py +526 -0
- maxframe/dataframe/indexing/rename.py +462 -0
- maxframe/dataframe/indexing/rename_axis.py +209 -0
- maxframe/dataframe/indexing/reset_index.py +402 -0
- maxframe/dataframe/indexing/sample.py +221 -0
- maxframe/dataframe/indexing/set_axis.py +194 -0
- maxframe/dataframe/indexing/set_index.py +61 -0
- maxframe/dataframe/indexing/setitem.py +130 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/where.py +308 -0
- maxframe/dataframe/initializer.py +288 -0
- maxframe/dataframe/merge/__init__.py +32 -0
- maxframe/dataframe/merge/append.py +121 -0
- maxframe/dataframe/merge/concat.py +325 -0
- maxframe/dataframe/merge/merge.py +593 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +215 -0
- maxframe/dataframe/misc/__init__.py +134 -0
- maxframe/dataframe/misc/_duplicate.py +46 -0
- maxframe/dataframe/misc/accessor.py +276 -0
- maxframe/dataframe/misc/apply.py +692 -0
- maxframe/dataframe/misc/astype.py +236 -0
- maxframe/dataframe/misc/case_when.py +141 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/cut.py +383 -0
- maxframe/dataframe/misc/datetimes.py +79 -0
- maxframe/dataframe/misc/describe.py +108 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +440 -0
- maxframe/dataframe/misc/drop_duplicates.py +248 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +728 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/get_dummies.py +208 -0
- maxframe/dataframe/misc/isin.py +217 -0
- maxframe/dataframe/misc/map.py +236 -0
- maxframe/dataframe/misc/melt.py +162 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +150 -0
- maxframe/dataframe/misc/pivot_table.py +262 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +256 -0
- maxframe/dataframe/misc/stack.py +238 -0
- maxframe/dataframe/misc/string_.py +221 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +468 -0
- maxframe/dataframe/misc/to_numeric.py +178 -0
- maxframe/dataframe/misc/transform.py +361 -0
- maxframe/dataframe/misc/transpose.py +136 -0
- maxframe/dataframe/misc/value_counts.py +182 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +223 -0
- maxframe/dataframe/missing/dropna.py +280 -0
- maxframe/dataframe/missing/fillna.py +275 -0
- maxframe/dataframe/missing/replace.py +439 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +89 -0
- maxframe/dataframe/operators.py +273 -0
- maxframe/dataframe/plotting/__init__.py +40 -0
- maxframe/dataframe/plotting/core.py +78 -0
- maxframe/dataframe/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
- maxframe/dataframe/reduction/__init__.py +107 -0
- maxframe/dataframe/reduction/aggregation.py +344 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/core.py +837 -0
- maxframe/dataframe/reduction/count.py +59 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/kurtosis.py +104 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +61 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/nunique.py +141 -0
- maxframe/dataframe/reduction/prod.py +76 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +69 -0
- maxframe/dataframe/reduction/skew.py +89 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +48 -0
- maxframe/dataframe/reduction/sum.py +77 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
- maxframe/dataframe/reduction/unique.py +90 -0
- maxframe/dataframe/reduction/var.py +72 -0
- maxframe/dataframe/sort/__init__.py +34 -0
- maxframe/dataframe/sort/core.py +36 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +311 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +280 -0
- maxframe/dataframe/statistics/quantile.py +341 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +29 -0
- maxframe/dataframe/tseries/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +297 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +52 -0
- maxframe/dataframe/utils.py +1267 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +96 -0
- maxframe/dataframe/window/core.py +69 -0
- maxframe/dataframe/window/ewm.py +249 -0
- maxframe/dataframe/window/expanding.py +147 -0
- maxframe/dataframe/window/rolling.py +376 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +66 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +33 -0
- maxframe/errors.py +21 -0
- maxframe/extension.py +81 -0
- maxframe/learn/__init__.py +17 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +52 -0
- maxframe/learn/contrib/xgboost/__init__.py +26 -0
- maxframe/learn/contrib/xgboost/classifier.py +86 -0
- maxframe/learn/contrib/xgboost/core.py +156 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
- maxframe/learn/contrib/xgboost/predict.py +138 -0
- maxframe/learn/contrib/xgboost/regressor.py +78 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +121 -0
- maxframe/learn/utils/__init__.py +15 -0
- maxframe/learn/utils/core.py +29 -0
- maxframe/lib/__init__.py +15 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/filesystem/__init__.py +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +198 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +157 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
- maxframe/lib/filesystem/tests/test_oss.py +182 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-311-darwin.so +0 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +861 -0
- maxframe/lib/sparse/array.py +1604 -0
- maxframe/lib/sparse/core.py +92 -0
- maxframe/lib/sparse/matrix.py +241 -0
- maxframe/lib/sparse/tests/__init__.py +15 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +150 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +139 -0
- maxframe/mixin.py +100 -0
- maxframe/odpsio/__init__.py +21 -0
- maxframe/odpsio/arrow.py +91 -0
- maxframe/odpsio/schema.py +364 -0
- maxframe/odpsio/tableio.py +322 -0
- maxframe/odpsio/tests/__init__.py +13 -0
- maxframe/odpsio/tests/test_arrow.py +88 -0
- maxframe/odpsio/tests/test_schema.py +297 -0
- maxframe/odpsio/tests/test_tableio.py +136 -0
- maxframe/odpsio/tests/test_volumeio.py +90 -0
- maxframe/odpsio/volumeio.py +95 -0
- maxframe/opcodes.py +590 -0
- maxframe/protocol.py +415 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +210 -0
- maxframe/remote/run_script.py +121 -0
- maxframe/serialization/__init__.py +26 -0
- maxframe/serialization/arrow.py +95 -0
- maxframe/serialization/core.cpython-311-darwin.so +0 -0
- maxframe/serialization/core.pxd +44 -0
- maxframe/serialization/core.pyi +61 -0
- maxframe/serialization/core.pyx +1094 -0
- maxframe/serialization/exception.py +86 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +91 -0
- maxframe/serialization/pandas.py +202 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +262 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +589 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +121 -0
- maxframe/serialization/serializables/tests/test_serializable.py +250 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +412 -0
- maxframe/session.py +1310 -0
- maxframe/tensor/__init__.py +183 -0
- maxframe/tensor/arithmetic/__init__.py +315 -0
- maxframe/tensor/arithmetic/abs.py +68 -0
- maxframe/tensor/arithmetic/absolute.py +68 -0
- maxframe/tensor/arithmetic/add.py +82 -0
- maxframe/tensor/arithmetic/angle.py +72 -0
- maxframe/tensor/arithmetic/arccos.py +104 -0
- maxframe/tensor/arithmetic/arccosh.py +91 -0
- maxframe/tensor/arithmetic/arcsin.py +94 -0
- maxframe/tensor/arithmetic/arcsinh.py +86 -0
- maxframe/tensor/arithmetic/arctan.py +106 -0
- maxframe/tensor/arithmetic/arctan2.py +128 -0
- maxframe/tensor/arithmetic/arctanh.py +86 -0
- maxframe/tensor/arithmetic/around.py +114 -0
- maxframe/tensor/arithmetic/bitand.py +95 -0
- maxframe/tensor/arithmetic/bitor.py +102 -0
- maxframe/tensor/arithmetic/bitxor.py +95 -0
- maxframe/tensor/arithmetic/cbrt.py +66 -0
- maxframe/tensor/arithmetic/ceil.py +71 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +74 -0
- maxframe/tensor/arithmetic/copysign.py +78 -0
- maxframe/tensor/arithmetic/core.py +544 -0
- maxframe/tensor/arithmetic/cos.py +85 -0
- maxframe/tensor/arithmetic/cosh.py +72 -0
- maxframe/tensor/arithmetic/deg2rad.py +72 -0
- maxframe/tensor/arithmetic/degrees.py +77 -0
- maxframe/tensor/arithmetic/divide.py +114 -0
- maxframe/tensor/arithmetic/equal.py +76 -0
- maxframe/tensor/arithmetic/exp.py +106 -0
- maxframe/tensor/arithmetic/exp2.py +67 -0
- maxframe/tensor/arithmetic/expm1.py +79 -0
- maxframe/tensor/arithmetic/fabs.py +74 -0
- maxframe/tensor/arithmetic/fix.py +69 -0
- maxframe/tensor/arithmetic/float_power.py +103 -0
- maxframe/tensor/arithmetic/floor.py +77 -0
- maxframe/tensor/arithmetic/floordiv.py +94 -0
- maxframe/tensor/arithmetic/fmax.py +105 -0
- maxframe/tensor/arithmetic/fmin.py +106 -0
- maxframe/tensor/arithmetic/fmod.py +99 -0
- maxframe/tensor/arithmetic/frexp.py +92 -0
- maxframe/tensor/arithmetic/greater.py +77 -0
- maxframe/tensor/arithmetic/greater_equal.py +69 -0
- maxframe/tensor/arithmetic/hypot.py +77 -0
- maxframe/tensor/arithmetic/i0.py +89 -0
- maxframe/tensor/arithmetic/imag.py +67 -0
- maxframe/tensor/arithmetic/invert.py +110 -0
- maxframe/tensor/arithmetic/isclose.py +115 -0
- maxframe/tensor/arithmetic/iscomplex.py +64 -0
- maxframe/tensor/arithmetic/isfinite.py +106 -0
- maxframe/tensor/arithmetic/isinf.py +103 -0
- maxframe/tensor/arithmetic/isnan.py +82 -0
- maxframe/tensor/arithmetic/isreal.py +63 -0
- maxframe/tensor/arithmetic/ldexp.py +99 -0
- maxframe/tensor/arithmetic/less.py +69 -0
- maxframe/tensor/arithmetic/less_equal.py +69 -0
- maxframe/tensor/arithmetic/log.py +92 -0
- maxframe/tensor/arithmetic/log10.py +85 -0
- maxframe/tensor/arithmetic/log1p.py +95 -0
- maxframe/tensor/arithmetic/log2.py +85 -0
- maxframe/tensor/arithmetic/logaddexp.py +80 -0
- maxframe/tensor/arithmetic/logaddexp2.py +78 -0
- maxframe/tensor/arithmetic/logical_and.py +81 -0
- maxframe/tensor/arithmetic/logical_not.py +74 -0
- maxframe/tensor/arithmetic/logical_or.py +82 -0
- maxframe/tensor/arithmetic/logical_xor.py +88 -0
- maxframe/tensor/arithmetic/lshift.py +82 -0
- maxframe/tensor/arithmetic/maximum.py +108 -0
- maxframe/tensor/arithmetic/minimum.py +108 -0
- maxframe/tensor/arithmetic/mod.py +104 -0
- maxframe/tensor/arithmetic/modf.py +83 -0
- maxframe/tensor/arithmetic/multiply.py +81 -0
- maxframe/tensor/arithmetic/nan_to_num.py +99 -0
- maxframe/tensor/arithmetic/negative.py +65 -0
- maxframe/tensor/arithmetic/nextafter.py +68 -0
- maxframe/tensor/arithmetic/not_equal.py +72 -0
- maxframe/tensor/arithmetic/positive.py +47 -0
- maxframe/tensor/arithmetic/power.py +106 -0
- maxframe/tensor/arithmetic/rad2deg.py +71 -0
- maxframe/tensor/arithmetic/radians.py +77 -0
- maxframe/tensor/arithmetic/real.py +70 -0
- maxframe/tensor/arithmetic/reciprocal.py +76 -0
- maxframe/tensor/arithmetic/rint.py +68 -0
- maxframe/tensor/arithmetic/rshift.py +81 -0
- maxframe/tensor/arithmetic/setimag.py +29 -0
- maxframe/tensor/arithmetic/setreal.py +29 -0
- maxframe/tensor/arithmetic/sign.py +81 -0
- maxframe/tensor/arithmetic/signbit.py +65 -0
- maxframe/tensor/arithmetic/sin.py +98 -0
- maxframe/tensor/arithmetic/sinc.py +102 -0
- maxframe/tensor/arithmetic/sinh.py +93 -0
- maxframe/tensor/arithmetic/spacing.py +72 -0
- maxframe/tensor/arithmetic/sqrt.py +81 -0
- maxframe/tensor/arithmetic/square.py +69 -0
- maxframe/tensor/arithmetic/subtract.py +81 -0
- maxframe/tensor/arithmetic/tan.py +88 -0
- maxframe/tensor/arithmetic/tanh.py +92 -0
- maxframe/tensor/arithmetic/tests/__init__.py +15 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
- maxframe/tensor/arithmetic/truediv.py +104 -0
- maxframe/tensor/arithmetic/trunc.py +72 -0
- maxframe/tensor/arithmetic/utils.py +65 -0
- maxframe/tensor/array_utils.py +186 -0
- maxframe/tensor/base/__init__.py +34 -0
- maxframe/tensor/base/astype.py +119 -0
- maxframe/tensor/base/atleast_1d.py +74 -0
- maxframe/tensor/base/broadcast_to.py +89 -0
- maxframe/tensor/base/ravel.py +92 -0
- maxframe/tensor/base/tests/__init__.py +13 -0
- maxframe/tensor/base/tests/test_base.py +114 -0
- maxframe/tensor/base/transpose.py +125 -0
- maxframe/tensor/base/unique.py +205 -0
- maxframe/tensor/base/where.py +127 -0
- maxframe/tensor/core.py +724 -0
- maxframe/tensor/datasource/__init__.py +32 -0
- maxframe/tensor/datasource/arange.py +156 -0
- maxframe/tensor/datasource/array.py +415 -0
- maxframe/tensor/datasource/core.py +109 -0
- maxframe/tensor/datasource/empty.py +169 -0
- maxframe/tensor/datasource/from_dataframe.py +70 -0
- maxframe/tensor/datasource/from_dense.py +54 -0
- maxframe/tensor/datasource/from_sparse.py +47 -0
- maxframe/tensor/datasource/full.py +186 -0
- maxframe/tensor/datasource/ones.py +173 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +278 -0
- maxframe/tensor/datasource/zeros.py +188 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +196 -0
- maxframe/tensor/indexing/compress.py +124 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +71 -0
- maxframe/tensor/indexing/fill_diagonal.py +183 -0
- maxframe/tensor/indexing/flatnonzero.py +60 -0
- maxframe/tensor/indexing/getitem.py +175 -0
- maxframe/tensor/indexing/nonzero.py +120 -0
- maxframe/tensor/indexing/setitem.py +132 -0
- maxframe/tensor/indexing/slice.py +29 -0
- maxframe/tensor/indexing/take.py +130 -0
- maxframe/tensor/indexing/tests/__init__.py +15 -0
- maxframe/tensor/indexing/tests/test_indexing.py +234 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/merge/__init__.py +15 -0
- maxframe/tensor/merge/stack.py +132 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +52 -0
- maxframe/tensor/operators.py +123 -0
- maxframe/tensor/random/__init__.py +168 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +137 -0
- maxframe/tensor/random/bytes.py +39 -0
- maxframe/tensor/random/chisquare.py +110 -0
- maxframe/tensor/random/choice.py +186 -0
- maxframe/tensor/random/core.py +234 -0
- maxframe/tensor/random/dirichlet.py +123 -0
- maxframe/tensor/random/exponential.py +94 -0
- maxframe/tensor/random/f.py +135 -0
- maxframe/tensor/random/gamma.py +128 -0
- maxframe/tensor/random/geometric.py +93 -0
- maxframe/tensor/random/gumbel.py +167 -0
- maxframe/tensor/random/hypergeometric.py +148 -0
- maxframe/tensor/random/laplace.py +133 -0
- maxframe/tensor/random/logistic.py +129 -0
- maxframe/tensor/random/lognormal.py +159 -0
- maxframe/tensor/random/logseries.py +122 -0
- maxframe/tensor/random/multinomial.py +133 -0
- maxframe/tensor/random/multivariate_normal.py +192 -0
- maxframe/tensor/random/negative_binomial.py +125 -0
- maxframe/tensor/random/noncentral_chisquare.py +132 -0
- maxframe/tensor/random/noncentral_f.py +126 -0
- maxframe/tensor/random/normal.py +143 -0
- maxframe/tensor/random/pareto.py +140 -0
- maxframe/tensor/random/permutation.py +104 -0
- maxframe/tensor/random/poisson.py +111 -0
- maxframe/tensor/random/power.py +142 -0
- maxframe/tensor/random/rand.py +82 -0
- maxframe/tensor/random/randint.py +121 -0
- maxframe/tensor/random/randn.py +96 -0
- maxframe/tensor/random/random_integers.py +123 -0
- maxframe/tensor/random/random_sample.py +86 -0
- maxframe/tensor/random/rayleigh.py +110 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +105 -0
- maxframe/tensor/random/standard_exponential.py +72 -0
- maxframe/tensor/random/standard_gamma.py +120 -0
- maxframe/tensor/random/standard_normal.py +74 -0
- maxframe/tensor/random/standard_t.py +135 -0
- maxframe/tensor/random/tests/__init__.py +15 -0
- maxframe/tensor/random/tests/test_random.py +167 -0
- maxframe/tensor/random/triangular.py +119 -0
- maxframe/tensor/random/uniform.py +131 -0
- maxframe/tensor/random/vonmises.py +131 -0
- maxframe/tensor/random/wald.py +114 -0
- maxframe/tensor/random/weibull.py +140 -0
- maxframe/tensor/random/zipf.py +122 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +66 -0
- maxframe/tensor/reduction/all.py +103 -0
- maxframe/tensor/reduction/allclose.py +88 -0
- maxframe/tensor/reduction/any.py +105 -0
- maxframe/tensor/reduction/argmax.py +103 -0
- maxframe/tensor/reduction/argmin.py +103 -0
- maxframe/tensor/reduction/array_equal.py +64 -0
- maxframe/tensor/reduction/core.py +168 -0
- maxframe/tensor/reduction/count_nonzero.py +81 -0
- maxframe/tensor/reduction/cumprod.py +97 -0
- maxframe/tensor/reduction/cumsum.py +101 -0
- maxframe/tensor/reduction/max.py +120 -0
- maxframe/tensor/reduction/mean.py +123 -0
- maxframe/tensor/reduction/min.py +120 -0
- maxframe/tensor/reduction/nanargmax.py +82 -0
- maxframe/tensor/reduction/nanargmin.py +76 -0
- maxframe/tensor/reduction/nancumprod.py +91 -0
- maxframe/tensor/reduction/nancumsum.py +94 -0
- maxframe/tensor/reduction/nanmax.py +111 -0
- maxframe/tensor/reduction/nanmean.py +106 -0
- maxframe/tensor/reduction/nanmin.py +111 -0
- maxframe/tensor/reduction/nanprod.py +94 -0
- maxframe/tensor/reduction/nanstd.py +126 -0
- maxframe/tensor/reduction/nansum.py +115 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +130 -0
- maxframe/tensor/reduction/std.py +134 -0
- maxframe/tensor/reduction/sum.py +125 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +181 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +17 -0
- maxframe/tensor/reshape/reshape.py +188 -0
- maxframe/tensor/reshape/tests/__init__.py +15 -0
- maxframe/tensor/reshape/tests/test_reshape.py +37 -0
- maxframe/tensor/statistics/__init__.py +13 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/quantile.py +288 -0
- maxframe/tensor/ufunc/__init__.py +26 -0
- maxframe/tensor/ufunc/ufunc.py +200 -0
- maxframe/tensor/utils.py +718 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_codegen.py +69 -0
- maxframe/tests/test_protocol.py +144 -0
- maxframe/tests/test_utils.py +376 -0
- maxframe/tests/utils.py +164 -0
- maxframe/typing_.py +37 -0
- maxframe/udf.py +134 -0
- maxframe/utils.py +1114 -0
- maxframe-0.1.0b5.dist-info/METADATA +104 -0
- maxframe-0.1.0b5.dist-info/RECORD +647 -0
- maxframe-0.1.0b5.dist-info/WHEEL +5 -0
- maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
- maxframe_client/__init__.py +17 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +118 -0
- maxframe_client/clients/spe.py +104 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +264 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +36 -0
- maxframe_client/session/graph.py +119 -0
- maxframe_client/session/odps.py +482 -0
- maxframe_client/session/task.py +280 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +85 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +89 -0
- maxframe_client/tests/test_session.py +255 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
from ... import opcodes
|
|
18
|
+
from ...core import OutputType
|
|
19
|
+
from ...serialization.serializables import AnyField, BoolField, Int32Field, StringField
|
|
20
|
+
from ...utils import no_default, pd_release_version
|
|
21
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
22
|
+
from ..utils import parse_index, validate_axis
|
|
23
|
+
|
|
24
|
+
_drop_na_enable_no_default = pd_release_version[:2] >= (1, 5)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DataFrameDropNA(DataFrameOperator, DataFrameOperatorMixin):
|
|
28
|
+
_op_type_ = opcodes.DROP_NA
|
|
29
|
+
|
|
30
|
+
axis = AnyField("axis", default=None)
|
|
31
|
+
how = StringField("how", default=None)
|
|
32
|
+
thresh = Int32Field("thresh", default=None)
|
|
33
|
+
subset = AnyField("subset", default=None)
|
|
34
|
+
|
|
35
|
+
# when True, dropna will be called on the input,
|
|
36
|
+
# otherwise non-nan counts will be used
|
|
37
|
+
drop_directly = BoolField("drop_directly", default=None)
|
|
38
|
+
# size of subset, used when how == 'any'
|
|
39
|
+
subset_size = Int32Field("subset_size", default=None)
|
|
40
|
+
|
|
41
|
+
def __init__(self, sparse=None, output_types=None, **kw):
|
|
42
|
+
super().__init__(_output_types=output_types, sparse=sparse, **kw)
|
|
43
|
+
|
|
44
|
+
def __call__(self, df):
|
|
45
|
+
new_shape = list(df.shape)
|
|
46
|
+
new_shape[0] = np.nan
|
|
47
|
+
|
|
48
|
+
params = df.params.copy()
|
|
49
|
+
params["index_value"] = parse_index(None, df.key, df.index_value.key)
|
|
50
|
+
params["shape"] = tuple(new_shape)
|
|
51
|
+
return self.new_tileable([df], **params)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def df_dropna(
|
|
55
|
+
df, axis=0, how=no_default, thresh=no_default, subset=None, inplace=False
|
|
56
|
+
):
|
|
57
|
+
"""
|
|
58
|
+
Remove missing values.
|
|
59
|
+
|
|
60
|
+
See the :ref:`User Guide <missing_data>` for more on which values are
|
|
61
|
+
considered missing, and how to work with missing data.
|
|
62
|
+
|
|
63
|
+
Parameters
|
|
64
|
+
----------
|
|
65
|
+
axis : {0 or 'index', 1 or 'columns'}, default 0
|
|
66
|
+
Determine if rows or columns which contain missing values are
|
|
67
|
+
removed.
|
|
68
|
+
|
|
69
|
+
* 0, or 'index' : Drop rows which contain missing values.
|
|
70
|
+
* 1, or 'columns' : Drop columns which contain missing value.
|
|
71
|
+
|
|
72
|
+
.. versionchanged:: 1.0.0
|
|
73
|
+
|
|
74
|
+
Pass tuple or list to drop on multiple axes.
|
|
75
|
+
Only a single axis is allowed.
|
|
76
|
+
|
|
77
|
+
how : {'any', 'all'}, default 'any'
|
|
78
|
+
Determine if row or column is removed from DataFrame, when we have
|
|
79
|
+
at least one NA or all NA.
|
|
80
|
+
|
|
81
|
+
* 'any' : If any NA values are present, drop that row or column.
|
|
82
|
+
* 'all' : If all values are NA, drop that row or column.
|
|
83
|
+
|
|
84
|
+
thresh : int, optional
|
|
85
|
+
Require that many non-NA values.
|
|
86
|
+
subset : array-like, optional
|
|
87
|
+
Labels along other axis to consider, e.g. if you are dropping rows
|
|
88
|
+
these would be a list of columns to include.
|
|
89
|
+
inplace : bool, default False
|
|
90
|
+
If True, do operation inplace and return None.
|
|
91
|
+
|
|
92
|
+
Returns
|
|
93
|
+
-------
|
|
94
|
+
DataFrame
|
|
95
|
+
DataFrame with NA entries dropped from it.
|
|
96
|
+
|
|
97
|
+
See Also
|
|
98
|
+
--------
|
|
99
|
+
DataFrame.isna: Indicate missing values.
|
|
100
|
+
DataFrame.notna : Indicate existing (non-missing) values.
|
|
101
|
+
DataFrame.fillna : Replace missing values.
|
|
102
|
+
Series.dropna : Drop missing values.
|
|
103
|
+
Index.dropna : Drop missing indices.
|
|
104
|
+
|
|
105
|
+
Examples
|
|
106
|
+
--------
|
|
107
|
+
>>> import maxframe.dataframe as md
|
|
108
|
+
>>> df = md.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
|
|
109
|
+
... "toy": [np.nan, 'Batmobile', 'Bullwhip'],
|
|
110
|
+
... "born": [md.NaT, md.Timestamp("1940-04-25"),
|
|
111
|
+
... md.NaT]})
|
|
112
|
+
>>> df.execute()
|
|
113
|
+
name toy born
|
|
114
|
+
0 Alfred NaN NaT
|
|
115
|
+
1 Batman Batmobile 1940-04-25
|
|
116
|
+
2 Catwoman Bullwhip NaT
|
|
117
|
+
|
|
118
|
+
Drop the rows where at least one element is missing.
|
|
119
|
+
|
|
120
|
+
>>> df.dropna().execute()
|
|
121
|
+
name toy born
|
|
122
|
+
1 Batman Batmobile 1940-04-25
|
|
123
|
+
|
|
124
|
+
Drop the rows where all elements are missing.
|
|
125
|
+
|
|
126
|
+
>>> df.dropna(how='all').execute()
|
|
127
|
+
name toy born
|
|
128
|
+
0 Alfred NaN NaT
|
|
129
|
+
1 Batman Batmobile 1940-04-25
|
|
130
|
+
2 Catwoman Bullwhip NaT
|
|
131
|
+
|
|
132
|
+
Keep only the rows with at least 2 non-NA values.
|
|
133
|
+
|
|
134
|
+
>>> df.dropna(thresh=2).execute()
|
|
135
|
+
name toy born
|
|
136
|
+
1 Batman Batmobile 1940-04-25
|
|
137
|
+
2 Catwoman Bullwhip NaT
|
|
138
|
+
|
|
139
|
+
Define in which columns to look for missing values.
|
|
140
|
+
|
|
141
|
+
>>> df.dropna(subset=['name', 'born']).execute()
|
|
142
|
+
name toy born
|
|
143
|
+
1 Batman Batmobile 1940-04-25
|
|
144
|
+
|
|
145
|
+
Keep the DataFrame with valid entries in the same variable.
|
|
146
|
+
|
|
147
|
+
>>> df.dropna(inplace=True)
|
|
148
|
+
>>> df.execute()
|
|
149
|
+
name toy born
|
|
150
|
+
1 Batman Batmobile 1940-04-25
|
|
151
|
+
"""
|
|
152
|
+
axis = validate_axis(axis, df)
|
|
153
|
+
if axis != 0:
|
|
154
|
+
raise NotImplementedError("Does not support dropna on DataFrame when axis=1")
|
|
155
|
+
if (
|
|
156
|
+
_drop_na_enable_no_default
|
|
157
|
+
and (how is not no_default)
|
|
158
|
+
and (thresh is not no_default)
|
|
159
|
+
):
|
|
160
|
+
raise TypeError(
|
|
161
|
+
"You cannot set both the how and thresh arguments at the same time."
|
|
162
|
+
)
|
|
163
|
+
if thresh is no_default and how is no_default:
|
|
164
|
+
how = "any"
|
|
165
|
+
|
|
166
|
+
op = DataFrameDropNA(
|
|
167
|
+
axis=axis,
|
|
168
|
+
how=how,
|
|
169
|
+
thresh=thresh,
|
|
170
|
+
subset=subset,
|
|
171
|
+
output_types=[OutputType.dataframe],
|
|
172
|
+
)
|
|
173
|
+
out_df = op(df)
|
|
174
|
+
if inplace:
|
|
175
|
+
df.data = out_df.data
|
|
176
|
+
else:
|
|
177
|
+
return out_df
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def series_dropna(series, axis=0, inplace=False, how=None):
|
|
181
|
+
"""
|
|
182
|
+
Return a new Series with missing values removed.
|
|
183
|
+
|
|
184
|
+
See the :ref:`User Guide <missing_data>` for more on which values are
|
|
185
|
+
considered missing, and how to work with missing data.
|
|
186
|
+
|
|
187
|
+
Parameters
|
|
188
|
+
----------
|
|
189
|
+
axis : {0 or 'index'}, default 0
|
|
190
|
+
There is only one axis to drop values from.
|
|
191
|
+
inplace : bool, default False
|
|
192
|
+
If True, do operation inplace and return None.
|
|
193
|
+
how : str, optional
|
|
194
|
+
Not in use. Kept for compatibility.
|
|
195
|
+
|
|
196
|
+
Returns
|
|
197
|
+
-------
|
|
198
|
+
Series
|
|
199
|
+
Series with NA entries dropped from it.
|
|
200
|
+
|
|
201
|
+
See Also
|
|
202
|
+
--------
|
|
203
|
+
Series.isna: Indicate missing values.
|
|
204
|
+
Series.notna : Indicate existing (non-missing) values.
|
|
205
|
+
Series.fillna : Replace missing values.
|
|
206
|
+
DataFrame.dropna : Drop rows or columns which contain NA values.
|
|
207
|
+
Index.dropna : Drop missing indices.
|
|
208
|
+
|
|
209
|
+
Examples
|
|
210
|
+
--------
|
|
211
|
+
>>> import maxframe.dataframe as md
|
|
212
|
+
>>> ser = md.Series([1., 2., np.nan])
|
|
213
|
+
>>> ser.execute()
|
|
214
|
+
0 1.0
|
|
215
|
+
1 2.0
|
|
216
|
+
2 NaN
|
|
217
|
+
dtype: float64
|
|
218
|
+
|
|
219
|
+
Drop NA values from a Series.
|
|
220
|
+
|
|
221
|
+
>>> ser.dropna().execute()
|
|
222
|
+
0 1.0
|
|
223
|
+
1 2.0
|
|
224
|
+
dtype: float64
|
|
225
|
+
|
|
226
|
+
Keep the Series with valid entries in the same variable.
|
|
227
|
+
|
|
228
|
+
>>> ser.dropna(inplace=True)
|
|
229
|
+
>>> ser.execute()
|
|
230
|
+
0 1.0
|
|
231
|
+
1 2.0
|
|
232
|
+
dtype: float64
|
|
233
|
+
|
|
234
|
+
Empty strings are not considered NA values. ``None`` is considered an
|
|
235
|
+
NA value.
|
|
236
|
+
|
|
237
|
+
>>> ser = md.Series([np.NaN, 2, md.NaT, '', None, 'I stay'])
|
|
238
|
+
>>> ser.execute()
|
|
239
|
+
0 NaN
|
|
240
|
+
1 2
|
|
241
|
+
2 NaT
|
|
242
|
+
3
|
|
243
|
+
4 None
|
|
244
|
+
5 I stay
|
|
245
|
+
dtype: object
|
|
246
|
+
>>> ser.dropna().execute()
|
|
247
|
+
1 2
|
|
248
|
+
3
|
|
249
|
+
5 I stay
|
|
250
|
+
dtype: object
|
|
251
|
+
"""
|
|
252
|
+
axis = validate_axis(axis, series)
|
|
253
|
+
op = DataFrameDropNA(
|
|
254
|
+
axis=axis,
|
|
255
|
+
how=how,
|
|
256
|
+
output_types=[OutputType.series],
|
|
257
|
+
)
|
|
258
|
+
out_series = op(series)
|
|
259
|
+
if inplace:
|
|
260
|
+
series.data = out_series.data
|
|
261
|
+
else:
|
|
262
|
+
return out_series
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def index_dropna(index, how="any"):
|
|
266
|
+
"""
|
|
267
|
+
Return Index without NA/NaN values.
|
|
268
|
+
|
|
269
|
+
Parameters
|
|
270
|
+
----------
|
|
271
|
+
how : {'any', 'all'}, default 'any'
|
|
272
|
+
If the Index is a MultiIndex, drop the value when any or all levels
|
|
273
|
+
are NaN.
|
|
274
|
+
|
|
275
|
+
Returns
|
|
276
|
+
-------
|
|
277
|
+
Index
|
|
278
|
+
"""
|
|
279
|
+
op = DataFrameDropNA(axis=0, how=how, output_types=[OutputType.index])
|
|
280
|
+
return op(index)
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import pandas as pd
|
|
16
|
+
|
|
17
|
+
from ... import opcodes
|
|
18
|
+
from ...core import ENTITY_TYPE, Entity, get_output_types
|
|
19
|
+
from ...serialization.serializables import AnyField, Int64Field, StringField
|
|
20
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
21
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
22
|
+
from ..utils import validate_axis
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class FillNA(DataFrameOperator, DataFrameOperatorMixin):
|
|
26
|
+
_op_type_ = opcodes.FILL_NA
|
|
27
|
+
|
|
28
|
+
value = AnyField(
|
|
29
|
+
"value", on_serialize=lambda x: x.data if isinstance(x, Entity) else x
|
|
30
|
+
)
|
|
31
|
+
method = StringField("method", default=None)
|
|
32
|
+
axis = AnyField("axis", default=0)
|
|
33
|
+
limit = Int64Field("limit", default=None)
|
|
34
|
+
downcast = AnyField("downcast", default=None)
|
|
35
|
+
|
|
36
|
+
def __init__(self, output_limit=1, **kw):
|
|
37
|
+
super().__init__(output_limit=output_limit, **kw)
|
|
38
|
+
|
|
39
|
+
def _set_inputs(self, inputs):
|
|
40
|
+
super()._set_inputs(inputs)
|
|
41
|
+
if self.method is None and len(inputs) > 1:
|
|
42
|
+
self.value = self._inputs[1]
|
|
43
|
+
|
|
44
|
+
def __call__(self, a, value_df=None):
|
|
45
|
+
method = getattr(self, "method", None)
|
|
46
|
+
if method == "backfill":
|
|
47
|
+
method = "bfill"
|
|
48
|
+
elif method == "pad":
|
|
49
|
+
method = "ffill"
|
|
50
|
+
self.method = method
|
|
51
|
+
axis = getattr(self, "axis", None) or 0
|
|
52
|
+
self.axis = validate_axis(axis, a)
|
|
53
|
+
|
|
54
|
+
inputs = [a]
|
|
55
|
+
if value_df is not None:
|
|
56
|
+
inputs.append(value_df)
|
|
57
|
+
if isinstance(a, DATAFRAME_TYPE):
|
|
58
|
+
return self.new_dataframe(
|
|
59
|
+
inputs,
|
|
60
|
+
shape=a.shape,
|
|
61
|
+
dtypes=a.dtypes,
|
|
62
|
+
index_value=a.index_value,
|
|
63
|
+
columns_value=a.columns_value,
|
|
64
|
+
)
|
|
65
|
+
elif isinstance(a, SERIES_TYPE):
|
|
66
|
+
return self.new_series(
|
|
67
|
+
inputs,
|
|
68
|
+
shape=a.shape,
|
|
69
|
+
dtype=a.dtype,
|
|
70
|
+
index_value=a.index_value,
|
|
71
|
+
name=a.name,
|
|
72
|
+
)
|
|
73
|
+
else:
|
|
74
|
+
return self.new_index(
|
|
75
|
+
inputs,
|
|
76
|
+
shape=a.shape,
|
|
77
|
+
dtype=a.dtype,
|
|
78
|
+
index_value=a.index_value,
|
|
79
|
+
name=a.name,
|
|
80
|
+
names=a.names,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def fillna(
|
|
85
|
+
df, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None
|
|
86
|
+
):
|
|
87
|
+
"""
|
|
88
|
+
Fill NA/NaN values using the specified method.
|
|
89
|
+
|
|
90
|
+
Parameters
|
|
91
|
+
----------
|
|
92
|
+
value : scalar, dict, Series, or DataFrame
|
|
93
|
+
Value to use to fill holes (e.g. 0), alternately a
|
|
94
|
+
dict/Series/DataFrame of values specifying which value to use for
|
|
95
|
+
each index (for a Series) or column (for a DataFrame). Values not
|
|
96
|
+
in the dict/Series/DataFrame will not be filled. This value cannot
|
|
97
|
+
be a list.
|
|
98
|
+
method : {'backfill', 'bfill', 'pad', 'ffill', None}, default None
|
|
99
|
+
Method to use for filling holes in reindexed Series
|
|
100
|
+
pad / ffill: propagate last valid observation forward to next valid
|
|
101
|
+
backfill / bfill: use next valid observation to fill gap.
|
|
102
|
+
axis : {0 or 'index', 1 or 'columns'}
|
|
103
|
+
Axis along which to fill missing values.
|
|
104
|
+
inplace : bool, default False
|
|
105
|
+
If True, fill in-place. Note: this will modify any
|
|
106
|
+
other views on this object (e.g., a no-copy slice for a column in a
|
|
107
|
+
DataFrame).
|
|
108
|
+
limit : int, default None
|
|
109
|
+
If method is specified, this is the maximum number of consecutive
|
|
110
|
+
NaN values to forward/backward fill. In other words, if there is
|
|
111
|
+
a gap with more than this number of consecutive NaNs, it will only
|
|
112
|
+
be partially filled. If method is not specified, this is the
|
|
113
|
+
maximum number of entries along the entire axis where NaNs will be
|
|
114
|
+
filled. Must be greater than 0 if not None.
|
|
115
|
+
downcast : dict, default is None
|
|
116
|
+
A dict of item->dtype of what to downcast if possible,
|
|
117
|
+
or the string 'infer' which will try to downcast to an appropriate
|
|
118
|
+
equal type (e.g. float64 to int64 if possible).
|
|
119
|
+
|
|
120
|
+
Returns
|
|
121
|
+
-------
|
|
122
|
+
DataFrame or None
|
|
123
|
+
Object with missing values filled or None if ``inplace=True``.
|
|
124
|
+
|
|
125
|
+
See Also
|
|
126
|
+
--------
|
|
127
|
+
interpolate : Fill NaN values using interpolation.
|
|
128
|
+
reindex : Conform object to new index.
|
|
129
|
+
asfreq : Convert TimeSeries to specified frequency.
|
|
130
|
+
|
|
131
|
+
Examples
|
|
132
|
+
--------
|
|
133
|
+
>>> import maxframe.tensor as mt
|
|
134
|
+
>>> import maxframe.dataframe as md
|
|
135
|
+
>>> df = md.DataFrame([[mt.nan, 2, mt.nan, 0],
|
|
136
|
+
... [3, 4, mt.nan, 1],
|
|
137
|
+
... [mt.nan, mt.nan, mt.nan, 5],
|
|
138
|
+
... [mt.nan, 3, mt.nan, 4]],
|
|
139
|
+
... columns=list('ABCD'))
|
|
140
|
+
>>> df.execute()
|
|
141
|
+
A B C D
|
|
142
|
+
0 NaN 2.0 NaN 0
|
|
143
|
+
1 3.0 4.0 NaN 1
|
|
144
|
+
2 NaN NaN NaN 5
|
|
145
|
+
3 NaN 3.0 NaN 4
|
|
146
|
+
|
|
147
|
+
Replace all NaN elements with 0s.
|
|
148
|
+
|
|
149
|
+
>>> df.fillna(0).execute()
|
|
150
|
+
A B C D
|
|
151
|
+
0 0.0 2.0 0.0 0
|
|
152
|
+
1 3.0 4.0 0.0 1
|
|
153
|
+
2 0.0 0.0 0.0 5
|
|
154
|
+
3 0.0 3.0 0.0 4
|
|
155
|
+
|
|
156
|
+
We can also propagate non-null values forward or backward.
|
|
157
|
+
|
|
158
|
+
>>> df.fillna(method='ffill').execute()
|
|
159
|
+
A B C D
|
|
160
|
+
0 NaN 2.0 NaN 0
|
|
161
|
+
1 3.0 4.0 NaN 1
|
|
162
|
+
2 3.0 4.0 NaN 5
|
|
163
|
+
3 3.0 3.0 NaN 4
|
|
164
|
+
|
|
165
|
+
Replace all NaN elements in column 'A', 'B', 'C', and 'D', with 0, 1,
|
|
166
|
+
2, and 3 respectively.
|
|
167
|
+
|
|
168
|
+
>>> values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
|
|
169
|
+
>>> df.fillna(value=values).execute()
|
|
170
|
+
A B C D
|
|
171
|
+
0 0.0 2.0 2.0 0
|
|
172
|
+
1 3.0 4.0 2.0 1
|
|
173
|
+
2 0.0 1.0 2.0 5
|
|
174
|
+
3 0.0 3.0 2.0 4
|
|
175
|
+
"""
|
|
176
|
+
if value is None and method is None:
|
|
177
|
+
raise ValueError("Must specify a fill 'value' or 'method'.")
|
|
178
|
+
elif value is not None and method is not None:
|
|
179
|
+
raise ValueError("Cannot specify both 'value' and 'method'.")
|
|
180
|
+
|
|
181
|
+
if isinstance(df, SERIES_TYPE) and isinstance(
|
|
182
|
+
value, (DATAFRAME_TYPE, pd.DataFrame)
|
|
183
|
+
):
|
|
184
|
+
raise ValueError(
|
|
185
|
+
'"value" parameter must be a scalar, dict or Series, but you passed a "%s"'
|
|
186
|
+
% type(value).__name__
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
if downcast is not None:
|
|
190
|
+
raise NotImplementedError(
|
|
191
|
+
'Currently argument "downcast" is not implemented yet'
|
|
192
|
+
)
|
|
193
|
+
if limit is not None:
|
|
194
|
+
raise NotImplementedError('Currently argument "limit" is not implemented yet')
|
|
195
|
+
|
|
196
|
+
if isinstance(value, ENTITY_TYPE):
|
|
197
|
+
value, value_df = None, value
|
|
198
|
+
else:
|
|
199
|
+
value_df = None
|
|
200
|
+
|
|
201
|
+
op = FillNA(
|
|
202
|
+
value=value,
|
|
203
|
+
method=method,
|
|
204
|
+
axis=axis,
|
|
205
|
+
limit=limit,
|
|
206
|
+
downcast=downcast,
|
|
207
|
+
output_types=get_output_types(df),
|
|
208
|
+
)
|
|
209
|
+
out_df = op(df, value_df=value_df)
|
|
210
|
+
if inplace:
|
|
211
|
+
df.data = out_df.data
|
|
212
|
+
else:
|
|
213
|
+
return out_df
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def ffill(df, axis=None, inplace=False, limit=None, downcast=None):
|
|
217
|
+
"""
|
|
218
|
+
Synonym for :meth:`DataFrame.fillna` with ``method='ffill'``.
|
|
219
|
+
|
|
220
|
+
Returns
|
|
221
|
+
-------
|
|
222
|
+
{klass} or None
|
|
223
|
+
Object with missing values filled or None if ``inplace=True``.
|
|
224
|
+
"""
|
|
225
|
+
return fillna(
|
|
226
|
+
df, method="ffill", axis=axis, inplace=inplace, limit=limit, downcast=downcast
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def bfill(df, axis=None, inplace=False, limit=None, downcast=None):
|
|
231
|
+
"""
|
|
232
|
+
Synonym for :meth:`DataFrame.fillna` with ``method='bfill'``.
|
|
233
|
+
|
|
234
|
+
Returns
|
|
235
|
+
-------
|
|
236
|
+
{klass} or None
|
|
237
|
+
Object with missing values filled or None if ``inplace=True``.
|
|
238
|
+
"""
|
|
239
|
+
return fillna(
|
|
240
|
+
df, method="bfill", axis=axis, inplace=inplace, limit=limit, downcast=downcast
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def index_fillna(index, value=None, downcast=None):
|
|
245
|
+
"""
|
|
246
|
+
Fill NA/NaN values with the specified value.
|
|
247
|
+
|
|
248
|
+
Parameters
|
|
249
|
+
----------
|
|
250
|
+
value : scalar
|
|
251
|
+
Scalar value to use to fill holes (e.g. 0).
|
|
252
|
+
This value cannot be a list-likes.
|
|
253
|
+
downcast : dict, default is None
|
|
254
|
+
A dict of item->dtype of what to downcast if possible,
|
|
255
|
+
or the string 'infer' which will try to downcast to an appropriate
|
|
256
|
+
equal type (e.g. float64 to int64 if possible).
|
|
257
|
+
|
|
258
|
+
Returns
|
|
259
|
+
-------
|
|
260
|
+
Index
|
|
261
|
+
|
|
262
|
+
See Also
|
|
263
|
+
--------
|
|
264
|
+
DataFrame.fillna : Fill NaN values of a DataFrame.
|
|
265
|
+
Series.fillna : Fill NaN Values of a Series.
|
|
266
|
+
"""
|
|
267
|
+
if isinstance(value, (list, pd.Series, SERIES_TYPE)):
|
|
268
|
+
raise ValueError("'value' must be a scalar, passed: %s" % type(value))
|
|
269
|
+
|
|
270
|
+
op = FillNA(
|
|
271
|
+
value=value,
|
|
272
|
+
downcast=downcast,
|
|
273
|
+
output_types=get_output_types(index),
|
|
274
|
+
)
|
|
275
|
+
return op(index)
|