我正在处理大型3D阵列,我经常需要以各种方式进行切片以进行各种数据分析.典型的"立方体"可以是~100GB(将来可能会变大)
似乎python中大型数据集的典型推荐文件格式是使用HDF5(h5py或pytables).我的问题是:使用HDF5存储和分析这些立方体而不是将它们存储在简单的平面二进制文件中是否有任何速度或内存使用效益?HDF5是否更适合表格数据,而不像我正在使用的大型数组?我看到HDF5可以提供很好的压缩,但我对处理速度和处理内存溢出更感兴趣.
我经常只想分析立方体的一个大的子集.pytables和h5py的一个缺点是,当我拿一个数组时,我总是得到一个numpy数组,用尽内存.但是,如果我切片平面二进制文件的numpy memmap,我可以得到一个视图,它将数据保存在磁盘上.因此,似乎我可以更轻松地分析我的数据的特定部分而不会超出我的记忆.
我已经探讨了pytables和h5py,到目前为止还没有看到我的目的的好处.
我必须处理大型3D立方体数据.我想将它们存储在HDF5文件中(使用h5py或pytables).我经常想要只对这些立方体的一部分进行分析.此部分太大而无法保存在内存中.我希望有一个numpy样式视图我的兴趣,而不是将数据复制到内存(类似于你可以用numpy memmap做).这可能吗?据我所知,使用h5py执行切片,你会在内存中得到一个numpy数组.
有人问我为什么要这样做,因为无论如何数据必须在某个时刻输入内存.出于必要,我的代码已经逐渐对来自这些多维数据集的数据进行零碎处理,一次将少量内容拉入内存.如果这些函数简单地遍历传递给它们的整个数据集,则这些函数最简单.如果我可以查看磁盘上的数据,我只需将此视图传递给这些函数即可.如果我不能拥有一个视图,我需要编写所有函数,只迭代感兴趣的片段.这将增加代码的复杂性,并使其更有可能在分析期间出现人为错误.
有没有办法在不复制到内存的情况下查看磁盘上的数据?
我正在使用 VSCodes 终端窗格。我激活 conda 环境。由于某种原因,该python命令仍然设置为/usr/bin/python,而不是 conda 环境的正确路径。
% conda activate myenv
% which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
正确的 anaconda 环境目录似乎确实在$PATH变量中,但/usr/bin优先级似乎高于它。
当我通过操作系统打开标准终端时,行为正如我所期望的那样。
% conda activate myenv
% which python
/Users/cpl/anaconda3/envs/myenv/bin/python
Run Code Online (Sandbox Code Playgroud)
请注意:我已经将 VSCode 首选项键设置python.pythonPath为/Users/cpl/anaconda3/envs/myenv/bin/python,并且我认为它可以正常工作。当我通过右键单击并选择运行文件时Run Python File In Terminal,将执行正确的 python(来自 conda 环境)。我的问题是直接使用VSCode终端执行python。
我的 shell 是 zsh,我使用的是 OSX。有什么建议吗?
我正在使用pandas.read_csv来读取空白分隔文件.该文件在每行前面都有可变数量的空白字符(数字是右对齐的).当我读取此文件时,它会创建一列NaN.为什么会发生这种情况,防止它的最佳方法是什么?
例:
文本文件:
9.0 3.3 4.0
32.3 44.3 5.1
7.2 1.1 0.9
Run Code Online (Sandbox Code Playgroud)
命令:
import pandas as pd
pd.read_csv("test.txt",delim_whitespace=True,header=None)
Run Code Online (Sandbox Code Playgroud)
输出:
0 1 2 3
0 NaN 9.0 3.3 4.0
1 NaN 32.3 44.3 5.1
2 NaN 7.2 1.1 0.9
Run Code Online (Sandbox Code Playgroud) 我经常有一个带有大型多索引的数据帧,以及一个带有多索引的辅助DataFrame,它是较大索引的子集.辅助数据帧通常是某种查找表.我经常想要将查找表中的列添加到更大的数据帧中.主DataFrame通常非常大,所以我想有效地做到这一点.
这是一个虚构的例子,我想将df2加入到df1:
In [11]: arrays = [ ['sun', 'sun', 'sun', 'moon', 'moon', 'moon', 'moon', 'moon'],
....: ['summer', 'winter', 'winter', 'summer', 'summer', 'summer', 'winter', 'winter'],
....: ['one', 'one', 'two', 'one', 'two', 'three', 'one', 'two']]
In [12]: tuples = list(zip(*arrays))
In [13]: index = pd.MultiIndex.from_tuples(tuples, names=['Body', 'Season','Item'])
In [14]: df1 = pd.DataFrame(np.random.randn(8,2), index=index,columns=['A','B'])
In [15]: df1
Out[15]:
A B
Body Season Item
sun summer one -0.121588 0.272774
winter one 0.233562 -2.005623
two -1.034642 0.315065
moon summer one 0.184548 0.820873
two 0.838290 0.495047 …Run Code Online (Sandbox Code Playgroud) 我想将全息图上的数字上的x和y轴上的标签更改为内部变量名称以外的内容.似乎影响轴标签的典型方法是将变量名称本身更改为标签.如果您想要复杂的标签,这是相当不方便的,特别是如果您经常从其他复杂数据对象(如pandas数据帧)进行转换.
是否有通用的方法:(A)在绘制图形时或之后更改图形的x和y标签,或者(B)为变量名称设置人类可读的别名?
我看到了有关如何编辑单个对象(例如,全息视图中的“图像”或“直方图”)的范围(aka轴限制)的示例,例如,在堆叠交换直方图范围时的此答案。如果要将其应用于更复杂的对象(例如NdOverlay或HoloMap对象),该怎么办?本质上,我想对整个轴或图形应用限制,而不必担心我在所述轴或图形中可能包含的每个元素。
例如,假设我有以下内容,并且想要删除轴上被抑制的零:
df = pd.DataFrame({'A':[1,2,3,1,2,3],'B':[4,5,6,1,4,9],'C':['a','a','a','b','b','b']})
tbl = hv.Table(df)
fig = tbl.to.curve(kdims=['A'],vdims=['B'],mdims=['C']).overlay()
fig *= hv.Points([(3,4),(5,6),(1,3)])
fig
Run Code Online (Sandbox Code Playgroud)
将自定义绘图限制应用于此叠加层之类的多元素对象或HoloMap的最佳方法是什么?我不希望不必过滤数据,因为如果您要进行探索性工作,将多个数据源结合在一起,可能会很麻烦。我是否需要对每个组件应用一个程度上的关键字,还是有一种简单的方法可以将其广播到整个图形?
感谢您的协助。
我需要创建一个包含大量(10个左右)类别的堆积条形图.问题是Pandas仅提供多达7种不同类别的颜色.它将剩余的颜色设置为蓝色.如何确保每个类别都有独特的颜色?
例:
df = pd.DataFrame(np.abs(np.random.randn(10,10)),columns=['A','B','C','D','E','F','G','H','I','J'], index=range(10))
df.plot(kind='bar',stacked=True,figsize=(20,10))
Run Code Online (Sandbox Code Playgroud)
生成条形图,其中H,I和J没有给出独特的颜色.