【问题标题】:Pandas(Python) to_clipboard with comma decimal parameter带有逗号十进制参数的 Pandas(Python) to_clipboard
【发布时间】:2015-02-05 15:55:24
【问题描述】:

如何复制DataFrame to_cliboard 并将其粘贴到excel 中,以逗号作为十进制?

在 R 中,这很简单。

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

但我无法在pandasto_clipboard 中弄清楚。

我尝试更改失败:

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

Spanish_Argentina.1252

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

提前致谢

【问题讨论】:

  • to_clipboard 采用与to_csv 相同的所有参数。但我认为主要是您的浮点格式未正确指定。您可能需要弄乱您的语言环境设置:stackoverflow.com/questions/6633523/…
  • @PaulH 我认为read_csv 使用了format specification 以便float_format=":n" 可以工作(如果你设置了你的语言环境)。但它似乎不起作用(TypeError 并未涵盖所有参数)。 :(
  • 我试过df.to_clipboard(float_format = ':n'),但显示TypeError: 'str' Object is not callable
  • 将这个功能(decimal 关键字)添加到to_csv(因此是to_clipboard)存在一个未解决的问题:github.com/pydata/pandas/issues/781
  • @AndyHayden 本地确实有效,但您需要将参数指定为函数,而不是字符串,请参阅下面的答案。无论如何有点尴尬..

标签: python pandas decimal comma


【解决方案1】:

从 Pandas 0.16 开始,您可以使用

df.to_clipboard(decimal=',')

to_clipboard() 将额外的 kwargs 传递给 to_csv(),它还有其他有用的选项。

【讨论】:

    【解决方案2】:

    有一些不同的方法可以实现这一点。首先,使用float_format 和您的语言环境可能的,虽然使用不是那么简单(但是一旦你知道它就很简单:float_format 参数应该是一个可以调用的函数):

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

    一个小插图:

    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)
    

    给予:

               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
    

    如果您不想依赖locale 设置但仍有逗号十进制输出,您可以这样做:

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

    或者只是在将数据写入剪贴板之前进行转换:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多