Python 如何将Numpy数组粘贴到Excel
我有多个文件,我使用Numpy和SciPy处理,但我需要提交一个Excel文件。如何有效地将一个巨大的numpy数组复制/粘贴到Excel 我曾尝试转换为Pandas的DataFrame对象,该对象具有非常有用的函数Python 如何将Numpy数组粘贴到Excel,python,excel,numpy,Python,Excel,Numpy,我有多个文件,我使用Numpy和SciPy处理,但我需要提交一个Excel文件。如何有效地将一个巨大的numpy数组复制/粘贴到Excel 我曾尝试转换为Pandas的DataFrame对象,该对象具有非常有用的函数到剪贴板(excel=True),但我花了大部分时间将数组转换为DataFrame 我不能简单地将数组写入CSV文件,然后在excel中打开它,因为我必须将数组添加到现有文件中;使用xlrd/xlwt和其他Excel工具很难实现这一点。我的最佳解决方案是将数组转换为字符串,然后使用w
到剪贴板(excel=True)
,但我花了大部分时间将数组转换为DataFrame
我不能简单地将数组写入CSV文件,然后在excel中打开它,因为我必须将数组添加到现有文件中;使用xlrd/xlwt和其他Excel工具很难实现这一点。我的最佳解决方案是将数组转换为字符串,然后使用
win32clipboard
将其发送到剪贴板。这不是一个跨平台的解决方案,但话说回来,Excel并非在所有平台上都可用
Excel使用选项卡(\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()
我已经用随机数组(100010000)测试了这段代码,最大的瓶颈似乎是将数据传递给函数。(当我在函数开头添加print
语句时,在它打印任何内容之前,我仍然需要等待一段时间。)
编辑:上一段讲述了我在Visual Studio Python工具方面的经验。在这种环境中,似乎print语句被延迟了。在直接命令行界面中,瓶颈在循环中,正如预期的那样。您也可以查看project。如果我需要处理加载到python中的多个文件,然后解析到excel中,我可能会使用
也就是说,我可以提供我的食谱,供任何编辑、投诉或反馈。它不使用第三方库,应该是跨平台的。从今天起,您也可以使用。它是开源的,与Numpy阵列和熊猫数据帧完全兼容。我将PhilMacKay的答案扩展到: -包括1维数组和, -要允许逗号作为十进制分隔符(decimal=“,”),请执行以下操作:
我认为这是使用pandas包最简单的方法之一。将阵列转换为
pandas.DataFrame
,您遇到了哪些问题?它应该像df=pandas.DataFrame(yourarray)
一样简单。没有问题,只是执行df=pandas.DataFrame(data=data)
和df.to_剪贴板(excel=True)
都需要很长时间。另外,我并不需要列名和行索引.Hm。您把打印的声明放在哪里了?在我看来,这似乎很奇怪,因为Python中的函数参数始终只是指针,所以需要花费任何明显的时间。也就是说,您不传递数组的内容,而是传递它的内存地址。您是对的,当我在iPython中尝试此操作时(在def…
行之后使用print
),没有延迟。在VisualStudio的Python工具的交互式窗口中尝试此操作时,只有一个。在iPython中,瓶颈在循环处。我将相应地修改我的答案。对我来说,这会将数组中的数字拆分为单个数字、小数点(.)和其他符号(例如e
)。例如,数组0.12345e-06
中的值作为0
,
,1
,…,粘贴到Excel中<代码>e
,-
,0
,6
分成不同的列。是的,看起来很棒。这个产品似乎真的可以提高Excel的可用性和Python的用户基础!但就我目前的目的而言,我不喜欢许可证。。。
import win32clipboard as clipboard
def to_clipboard(array, decimal=","):
"""
Copies an array into a string format acceptable by Excel.
Columns separated by \t, rows separated by \n
"""
# Create string from array
try:
n, m = np.shape(array)
except ValueError:
n, m = 1, 0
line_strings = []
if m > 0:
for line in array:
if decimal == ",":
line_strings.append("\t".join(line.astype(str)).replace(
"\n","").replace(".", ","))
else:
line_strings.append("\t".join(line.astype(str)).replace(
"\n",""))
array_string = "\r\n".join(line_strings)
else:
if decimal == ",":
array_string = "\r\n".join(array.astype(str)).replace(".", ",")
else:
array_string = "\r\n".join(array.astype(str))
# Put string into clipboard (open, clear, set, close)
clipboard.OpenClipboard()
clipboard.EmptyClipboard()
clipboard.SetClipboardText(array_string)
clipboard.CloseClipboard()
import pandas as pd
pd.DataFrame(arr).to_clipboard()