Phi*_*Kay 6 python excel numpy
我有多个文件,我使用Numpy和SciPy处理,但我需要提供一个Excel文件.如何有效地将巨大的numpy数组复制/粘贴到Excel?
我试图转换为Pandas的DataFrame对象,它具有非常有用的功能to_clipboard(excel=True)
,但我花了大部分时间将数组转换为DataFrame.
我不能简单地将数组写入CSV文件,然后在excel中打开它,因为我必须将数组添加到现有文件中; 用xlrd/xlwt和其他Excel工具很难实现的东西.
Phi*_*Kay 12
我最好的解决方案是将数组转换为字符串,然后用win32clipboard
它将其发送到剪贴板.这不是一个跨平台的解决方案,但同样,Excel无论如何都无法在每个平台上实现.
Excel使用tabs(\t
)标记列更改,并\r\n
指示行更改.
相关代码将是:
import win32clipboard as clipboard
def toClipboardForExcel(array):
"""
Copies an array into a string format acceptable by Excel.
Columns separated by \t, rows separated by \n
"""
# Create string from array
line_strings = []
for line in array:
line_strings.append("\t".join(line.astype(str)).replace("\n",""))
array_string = "\r\n".join(line_strings)
# Put string into clipboard (open, clear, set, close)
clipboard.OpenClipboard()
clipboard.EmptyClipboard()
clipboard.SetClipboardText(array_string)
clipboard.CloseClipboard()
Run Code Online (Sandbox Code Playgroud)
我用随机数组形状(1000,10000)测试了这个代码,最大的瓶颈似乎是将数据传递给函数.(当我print
在函数的开头添加一个语句时,我仍然需要等待它才能打印任何东西.)
编辑:上一段涉及我在Visual Studio的Python工具中的经验.在这种环境中,它会像print语句一样延迟.在直接命令行界面中,瓶颈在循环中,与预期的一样.
小智 9
import pandas as pd
pd.DataFrame(arr).to_clipboard()
Run Code Online (Sandbox Code Playgroud)
我认为这是使用 pandas 包最简单的方法之一。