Search code examples
pythonpandasnumber-formatting

How to use pandas.to_clipboard with comma decimal separator


How can I copy a DataFrame to_clipboard and paste it in excel with commas as decimal?

In R this is simple.

write.table(obj, 'clipboard', dec = ',')

But I cannot figure out in pandas to_clipboard.

I unsuccessfully tried changing:

import locale
locale.setlocale(locale.LC_ALL, '')

Spanish_Argentina.1252

or

df.to_clipboard(float_format = '%,%')

Solution

  • There are some different ways to achieve this. First, it is possible with float_format and your locale, although the use is not so straightforward (but simple once you know it: the float_format argument should be a function that can be called):

    df.to_clipboard(float_format='{:n}'.format)
    

    A small illustration:

    In [97]: df = pd.DataFrame(np.random.randn(5,2), columns=['A', 'B'])
    
    In [98]: df
    Out[98]:
              A         B
    0  1.125438 -1.015477
    1  0.900816  1.283971
    2  0.874250  1.058217
    3 -0.013020  0.758841
    4 -0.030534 -0.395631
    
    In [99]: df.to_clipboard(float_format='{:n}'.format)
    

    gives:

               A         B
    0    1,12544  -1,01548
    1   0,900816   1,28397
    2    0,87425   1,05822
    3 -0,0130202  0,758841
    4 -0,0305337 -0,395631
    

    If you don't want to rely on the locale setting but still have comma decimal output, you can do this:

    class CommaFloatFormatter:
        def __mod__(self, x):
            return str(x).replace('.',',')
    
    df.to_clipboard(float_format=CommaFloatFormatter())
    

    or simply do the conversion before writing the data to clipboard:

    df.applymap(lambda x: str(x).replace('.',',')).to_clipboard()