Comments (2)
hmm đ¤ not sure about the details. In any case you should not convert floats to decimal if you need this high precision/scale. You should try to use string -> decimal
Some alternatives that "work"
Same as your but cast inside with_columns
instead of constructor
pl.DataFrame(
data={"a": [12345678.987654321, 112233445566778899.456, 0.1234567890123456789]}
).with_columns(
d1=pl.col("a").cast(pl.Decimal),
d2=pl.col("a").cast(pl.Decimal(scale=19)),
)
# shape: (3, 3)
# âââââââââââââŦâââââââââââââââââââââŦâââââââââââââââââââââââââââââââââââââââââ
# â a â d1 â d2 â
# â --- â --- â --- â
# â f64 â decimal[38,0] â decimal[38,19] â
# âââââââââââââĒâââââââââââââââââââââĒâââââââââââââââââââââââââââââââââââââââââĄ
# â 1.2346e7 â 12345678 â 12345678.9876543211786207232 â
# â 1.1223e17 â 112233445566778896 â 112233445566778890.8777382082762506240 â
# â 0.123457 â 0 â 0.1234567890123456768 â
# âââââââââââââ´âââââââââââââââââââââ´âââââââââââââââââââââââââââââââââââââââââ
Use String
pl.DataFrame(
data={
"a": ["12345678.987654321", "112233445566778899.456", "0.1234567890123456789"]
}
).with_columns(d=pl.col("a").cast(pl.Decimal))
# shape: (3, 2)
# ââââââââââââââââââââââââââŦâââââââââââââââââââââââââââââââââââââââââ
# â a â d â
# â --- â --- â
# â str â decimal[*,19] â
# ââââââââââââââââââââââââââĒâââââââââââââââââââââââââââââââââââââââââĄ
# â 12345678.987654321 â 12345678.9876543210000000000 â
# â 112233445566778899.456 â 112233445566778899.4560000000000000000 â
# â 0.1234567890123456789 â 0.1234567890123456789 â
# ââââââââââââââââââââââââââ´âââââââââââââââââââââââââââââââââââââââââ
from polars.
This seems reasonable to me - you can't create exact precision data from inexact precision data. Python allows it and take a look at the results, using your example values; you will have simply encoded the inexact precision such that each one of the initialised Decimal values is arguably "wrong" (and the second value in't just arguably wrong, it is completely wrong ;):
(Decimal('12345678.987654320895671844482421875'),
Decimal('112233445566778896'),
Decimal('0.12345678901234567736988623209981597028672695159912109375'))
âšī¸ You should really init Decimals from exact data, such as string or int
(and I'd be cautious about casting, for the same reason).
from polars.
Related Issues (20)
- QOL improvements for .rolling
- Include example with function accepting multiple arguments in `Expr.map_batches`
- Documentation issue in `normalize`/`name` parameter from `.value_counts()` method HOT 2
- writing to os.devnull HOT 1
- `Series[list].explode()` should not return `None` for empty lists HOT 5
- write_database to snowflake with adbc engine spouts context canceled error log
- Cannot tell if hvplot version 0.10.0 >= 0.9.1 HOT 2
- dtype 'Time' gets converted to i64 when collect(streaming=True) is used. HOT 1
- `.agg_groups()` PanicException when not used in a group_by context
- Additional Parameter for json_normalize HOT 5
- fold shouldn't require that acc and exprs share the same dtype
- Adding `descending` parameter to `Expr.over` HOT 5
- polars.LazyFrame.head recommends using fetch() HOT 1
- Reading large json file error: ComputeError: InputTooLarge at character 0
- Serialize for AnyType has a todo!() HOT 1
- File cache invalidation not triggered for HTTP if size is the same
- Loading parquet written from an Arrow table produces non-deterministic incorrect numbers since 1.2.0 HOT 3
- illegal hardware instruction with python 3.12.4 and polars 1.1.0 on MacOS Sanoma 14, M2 HOT 4
- Panic when call `hash()` on `struct` dtype HOT 2
- Multiple - Reading into a single DataFrame - read_csv - Error when using encoding = latin1 HOT 2
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.