-
-
Notifications
You must be signed in to change notification settings - Fork 18.6k
feature #49580: support new-style float_format string in to_csv #61650
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
de303c7
to
d7ffede
Compare
…_csv feat(to_csv): support new-style float_format strings using str.format Detect and process new-style format strings (e.g., "{:,.2f}") in the float_format parameter of to_csv. - Check if float_format is a string and matches new-style pattern - Convert it to a callable (e.g., lambda x: float_format.format(x)) - Ensure compatibility with NaN values and mixed data types - Improves formatting output for floats when exporting to CSV Example: df = pd.DataFrame([1234.56789, 9876.54321]) df.to_csv(float_format="{:,.2f}") # now outputs formatted values like 1,234.57 Co-authored-by: Pedro Santos <pedro.filipe.santos@tecnico.ulisboa.pt>
d7ffede
to
1983866
Compare
@simonjayhawkins Hi! Just wanted to check if this PR needs anything else from my side. Thanks in advance for reviewing |
|
||
if fmt is None: | ||
return None | ||
|
||
if callable(fmt): | ||
return fmt |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if fmt is None: | |
return None | |
if callable(fmt): | |
return fmt | |
if fmt is None or callable(fmt): | |
return fmt |
except (ValueError, KeyError, IndexError) as e: | ||
raise ValueError(f"Invalid new-style format string {fmt!r}") from e | ||
|
||
# If fmt is neither None, nor callable, nor a successfully processed string, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# If fmt is neither None, nor callable, nor a successfully processed string, |
with warnings.catch_warnings(record=True): | ||
warnings.simplefilter("always") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use tm.assert_produces_warning
else: | ||
try: | ||
_ = fmt.format(1.0) # Test with an arbitrary float | ||
return lambda x: fmt.format(x) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return lambda x: fmt.format(x) | |
return fmt.format |
Could you add a whatsnew entry in |
feat(to_csv): support new-style float_format strings using str.format
Detect and process new-style format strings (e.g., "{:,.2f}") in the float_format parameter of to_csv.
Example:
df = pd.DataFrame([1234.56789, 9876.54321])
df.to_csv(float_format="{:,.2f}") # now outputs formatted values like 1,234.57 and support new-style without .format
doc/source/whatsnew/v3.0.0.rst
file if fixing a bug or adding a new feature.