我已经看过this response尝试使用numpy打印整个数组而不是摘要视图,但它似乎无法正常工作。
我有一个带有命名标题的CSV。这是前五行
v0 v1 v2 v3 v4
1001 5529 24 56663 16445
1002 4809 30.125 49853 28069
1003 407 20 28462 8491
1005 605 19.55 75423 4798
1007 1607 20.26 79076 12962
我想读入数据并能够完全查看。我试过这样做:
import numpy as np
np.set_printoptions(threshold=np.inf)
main_df2=np.genfromtxt('file location', delimiter=",")
main_df2[0:3,:]
然而,这仍然会返回截断的数组,并且性能似乎大大降低。我做错了什么?
答案 0 :(得分:1)
我很惊讶你得到一个数组,因为你的例子不使用','作为分隔符。但也许你忘了在你的示例文件中包含逗号。
如果我使用csv数据,我会使用pandas
的DataFrame功能。它使用了numpy
,因此所有numpy
操作都可以在pandas DataFrame上使用。
Pandas有很多技巧来操作数据表。
import pandas as pd
df = pd.read_csv('nothing.txt')
#==============================================================================
# next line remove blanks from the column names
#==============================================================================
df.columns = [name.strip(' ') for name in df.columns]
pd.set_option('display.height', 1000)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
print(df)
答案 1 :(得分:1)
好的,在常规的Python会话中(我通常使用Ipython),我设置了打印选项,并制作了一个大型数组:
>>> np.set_printoptions(threshold=np.inf, suppress=True)
>>> x=np.random.rand(25000,5)
当我执行下一行时,它花费大约21秒格式化数组,然后将结果字符串写入屏幕(使用的行数多于终端的窗口缓冲区)。
>>> x
这与
相同>>> print(repr(x))
x
的内部存储空间是浮动缓冲区(您可以通过x.tostring()
'看到'。要打印x
,必须对其进行格式化,创建包含多行字符串每个数字的打印表示,全部125000个。repr(x)
的结果是字符串1850000个字符长,25000行。这需要21秒。在屏幕上显示仅受终端滚动速度的限制
我没有看过细节,但我认为numpy格式主要用Python编写,而不是编译。它的设计更多的是灵活性而不是速度。想要查看10-100行数组是正常的。 25000行是一个不寻常的案例。
有点奇怪的是,将此数组写为csv很快,延迟时间最短:
>>> np.savetxt('test.txt', x, fmt='%10f', delimiter=',')
我知道savetxt
做了什么 - 它迭代行,并写一个文件
f.write(fmt % tuple(row))
显然,常规repr
的所有钟声都是昂贵的。它可以总结,它可以处理多个维度,它可以处理复杂的dtypes等。简单地用已知的固定格式格式化每一行并不是耗时的步骤。
实际上,savetxt
路线可能更有用,也更快。您可以控制显示格式,您可以在闲暇时在编辑器或终端窗口中查看生成的文本文件。您不会受终端窗口的滚动缓冲区的限制。但是这个savetxt
文件将如何与原始csv
不同?
答案 2 :(得分:0)
当我复制并粘贴数据时,它在Excel中打开,但文件是CSV。
我正在上课,我们必须使用numpy。我注意到的一件事是,由于科学记数法,结果非常难以辨认,所以我做了以下事情,事情变得更加顺畅:
np.set_printoptions(threshold=100000, suppress=True)
suppress语句为我节省了很多格式。当我将threshold
更改为'nan'
或inf
之类的内容时,性能确实会受到很大影响,而且我不确定原因。