如何将Numpy数组粘贴到Excel

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 包最简单的方法之一。