Obviously I can write conditional code to check for float('nan')
values but is there a neater way with any sort of formatting string or
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'. This would
then make it much easier to handle outputting values from sensors when
not all sensors are present.
So, for example, my battery monitoring program outputs:-
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - 12.34 volts -0.01 Amps
If the starter battery sensor has failed, or is disconnected, I see:-
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - nan volts nan Amps
What I would like is for those 'nan' strings to be just a '-' or
something similar.
Obviously I can write conditional code to check for float('nan')
values but is there a neater way with any sort of formatting string or
other sort of cleverness?
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'.
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'. This would
then make it much easier to handle outputting values from sensors when
not all sensors are present.
So, for example, my battery monitoring program outputs:-
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - 12.34 volts -0.01 Amps
If the starter battery sensor has failed, or is disconnected, I see:-
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - nan volts nan Amps
What I would like is for those 'nan' strings to be just a '-' or
something similar.
Obviously I can write conditional code to check for float('nan')
values but is there a neater way with any sort of formatting string or
other sort of cleverness?
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'.
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'.
[...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - nan volts nan Amps
What I would like is for those 'nan' strings to be just a '-' or
something similar.
The simplest thing is probably just a function writing it how you want
it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
and then use eg:
print(f'value is {float_s(value)}')
or whatever fits your code.
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'. [...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - nan volts nan Amps
What I would like is for those 'nan' strings to be just a '-' or
something similar.
The simplest thing is probably just a function writing it how you want
it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'. [...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - 12.34 volts -0.01 Amps
The simplest thing is probably just a function writing it how you
want it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'. [...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - 12.34 volts -0.01 Amps
The simplest thing is probably just a function writing it how you
want it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'. [...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - 12.34 volts -0.01 Amps
The simplest thing is probably just a function writing it how you
want it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
I would be tempted to try monkey-patching the float class to override
the __format__ method. I have no idea what side effects that might
have, or if it's even used by the various formatting mechanisms, so
you might end up scraping bits off the walls...
On 2024-02-17, Cameron Simpson via Python-list <python-list@python.org> wrote:
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'.
[...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - nan volts nan Amps
What I would like is for those 'nan' strings to be just a '-' or
something similar.
The simplest thing is probably just a function writing it how you want
it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
and then use eg:
print(f'value is {float_s(value)}')
or whatever fits your code.
Except he's obviously using some sort of formatting to control the
number of columns and decimal places, so 'str(f)' is not going to cut
it. Is the basic floating point number formatting functionality seen
when using f-strings or '%' operator part of the float type or is it
part of the f-string and % operator?
On 18/02/24 09:53, Grant Edwards via Python-list wrote:
On 2024-02-17, Cameron Simpson via Python-list <python-list@python.org> wrote:
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'.
[...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - nan volts nan Amps
What I would like is for those 'nan' strings to be just a '-' or
something similar.
The simplest thing is probably just a function writing it how you want
it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
and then use eg:
print(f'value is {float_s(value)}')
or whatever fits your code.
Except he's obviously using some sort of formatting to control the
number of columns and decimal places, so 'str(f)' is not going to cut
it. Is the basic floating point number formatting functionality seen
when using f-strings or '%' operator part of the float type or is it
part of the f-string and % operator?
It's part of the PSL's string library: "Format Specification
Mini-Language" https://docs.python.org/3/library/string.html#format-specification-mini-language
Has the OP stated if we're talking 'Python' or numpy, pandas, ...?
On 2024-02-16, Chris Green via Python-list <python-list@python.org> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'.
It would probably help if you told us how you're "outputting" them now
(the Python feaatures/functions used, not the actual output format).
Are you using f-strings, the % operator, str.format(), or ??
I would be tempted to try monkey-patching the float class to override
the __format__ method. I have no idea what side effects that might
have, or if it's even used by the various formatting mechanisms, so
you might end up scraping bits off the walls...
It's using f'{...}' at the moment.
From the above:
Here's a demonstration of how to hook custom code into the f-string formatting engine. It's brilliantly depraved.
https://stackoverflow.com/questions/55876683/hook-into-the-builtin-python-f-string-format-machinery
From the above:
You can, but only if you write evil code that probably should
never end up in production software. So let's get started!
I'm not going to integrate it into your library, but I will show
you how to hook into the behavior of f-strings. This is roughly
how it'll work:
1. Write a function that manipulates the bytecode instructions of
code objects to replace FORMAT_VALUE instructions with calls
to a hook function;
2. Customize the import mechanism to make sure that the bytecode
of every module and package (except standard library modules
and site-packages) is modified with that function.
Final code is here:
https://github.com/mivdnber/formathack
dn <PythonList@danceswithmice.info> wrote:
On 18/02/24 09:53, Grant Edwards via Python-list wrote:Just python, on a Raspberry Pi, so currently Python 3.9.2.
On 2024-02-17, Cameron Simpson via Python-list <python-list@python.org> wrote:
On 16Feb2024 22:12, Chris Green <cl@isbd.net> wrote:
I'm looking for a simple way to make NaN values output as something
like '-' or even just a space instead of the string 'nan'.
[...]
Battery Voltages and Currents
Leisure Battery - 12.42 volts -0.52 Amps
Starter Battery - nan volts nan Amps
What I would like is for those 'nan' strings to be just a '-' or
something similar.
The simplest thing is probably just a function writing it how you want >>>> it:
def float_s(f):
if isnan(f):
return "-"
return str(f)
and then use eg:
print(f'value is {float_s(value)}')
or whatever fits your code.
Except he's obviously using some sort of formatting to control the
number of columns and decimal places, so 'str(f)' is not going to cut
it. Is the basic floating point number formatting functionality seen
when using f-strings or '%' operator part of the float type or is it
part of the f-string and % operator?
It's part of the PSL's string library: "Format Specification
Mini-Language"
https://docs.python.org/3/library/string.html#format-specification-mini-language
Has the OP stated if we're talking 'Python' or numpy, pandas, ...?
Sysop: | DaiTengu |
---|---|
Location: | Appleton, WI |
Users: | 920 |
Nodes: | 10 (1 / 9) |
Uptime: | 78:36:07 |
Calls: | 12,187 |
Calls today: | 2 |
Files: | 186,526 |
Messages: | 2,236,925 |