Comments (2)
Hi @kskalski
this is working correctly and has to do with floating point imprecision.
pl.Config.set_fmt_str_lengths(100)
pl.DataFrame(
{
"f32": [132.04],
"f64": [132.04],
},
schema_overrides={"f32": pl.Float32},
).with_columns(
f32_long=pl.col("f32").map_elements(lambda x: f"{x:.20f}"),
f64_long=pl.col("f64").map_elements(lambda x: f"{x:.20f}"),
)
# shape: (1, 4)
# ┌────────────┬────────┬──────────────────────────┬──────────────────────────┐
# │ f32 ┆ f64 ┆ f32_long ┆ f64_long │
# │ --- ┆ --- ┆ --- ┆ --- │
# │ f32 ┆ f64 ┆ str ┆ str │
# ╞════════════╪════════╪══════════════════════════╪══════════════════════════╡
# │ 132.039993 ┆ 132.04 ┆ 132.03999328613281250000 ┆ 132.03999999999999204192 │
# └────────────┴────────┴──────────────────────────┴──────────────────────────┘
python uses the f64 version internally with you can easily check
f'{132.04:.20f}'
# '132.03999999999999204192'
so in the end you are comparing ever to slightly different numbers.
This is expected because there needs to be some differencte between f64 and f32 otherwise we could always use f32 😉
from polars.
Oh, you are right, 312.04
is not representable precisely by whatever precision floating point number, since there is no rational number representation a/b
where b=2^c
for any c
, as floating point numbers use exponent of base 2
. The differences observed come from the way those numbers are rounded for display.
from polars.
Related Issues (20)
- Turn off CSE for new streaming engine
- Reading wide parquet is 25x slower with polars than pyarrow HOT 4
- In read_csv convert too long separator, quote_char, and/or eol_char to valid char HOT 2
- Optimize for simple math? HOT 3
- read_csv on gzipped csv much slower if n_rows specified
- CSV
- Some pl.Expr aggregations missing in the Aggregation section HOT 1
- Incorrect values calculated depending on the sequence of operations HOT 4
- from_jax
- Unexpected behaviour when calling list() on a slice of a series of dtype Object
- Make `new_streaming` feature available on Rust Polars HOT 1
- Parameters in `clip()` parse strings as column names, which is undocumented
- Add pl.Expr.min_by/max_by HOT 5
- `pl.Config.set_tbl_rows` doesn't work as expected HOT 1
- Support user defined aggregation functions/window functions as plugins HOT 1
- could not compile polars-arrow v0.42.0: the trait bound [buffer::immutable::Buffer]: Default is not satisfied HOT 1
- Expressified `expr.name.map` HOT 2
- `.square` as syntactic sugar for `.pow(2)`
- add a margin of error method for Confidence Intervals (CI)
- raise_if_empty=False does not suppress NoDataError if skip_rows_after_header is passed and no data rows remain
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from polars.