带有逗号十进制参数的 Pandas(Python) to_clipboard
Posted
技术标签:
【中文标题】带有逗号十进制参数的 Pandas(Python) to_clipboard【英文标题】:Pandas(Python) to_clipboard with comma decimal parameter 【发布时间】:2015-02-05 15:55:24 【问题描述】:如何复制DataFrame
to_cliboard 并将其粘贴到excel 中,以逗号作为十进制?
在 R 中,这很简单。
write.table(obj, 'clipboard', dec = ',')
但我无法在pandas
to_clipboard 中弄清楚。
我尝试更改失败:
import locale
locale.setlocale(locale.LC_ALL, '')
Spanish_Argentina.1252
或df.to_clipboard(float_format = '%,%')
提前致谢
【问题讨论】:
to_clipboard
采用与to_csv
相同的所有参数。但我认为主要是您的浮点格式未正确指定。您可能需要弄乱您的语言环境设置:***.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 本地确实有效,但您需要将参数指定为函数,而不是字符串,请参阅下面的答案。无论如何有点尴尬..
【参考方案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()
【讨论】:
以上是关于带有逗号十进制参数的 Pandas(Python) to_clipboard的主要内容,如果未能解决你的问题,请参考以下文章