在学习熊猫的过程中,我试图解答这个问题好几个月。我将SAS用于日常工作,对于它的核心支持非常重要。但是,由于许多其他原因,SAS作为一款软件很糟糕。 有一天,我希望用python和pandas取代我的SAS,但是我目前缺乏大型数据集的核心外工作流程。我不是在谈论需要分布式网络的“大数据”,而是文件太大而不适合内存,但又足够小以适应硬盘驱动器。 我的第一个想法是用于HDFStore在磁盘上保存大型数据集,并只将需要的部分拖放到数据框中进行分析。其他人提到MongoDB是一种更易于使用的替代方案。我的问题是这样的: 什么是一些最佳实践工作流程来完成以下工作: 将平面文件加载到磁盘上的永久数据库结构中 查询该数据库以检索要送入熊猫数据结构的数据 在熊猫中操作片段后更新数据库 真实世界的例子会受到大家的赞赏,特别是那些使用“大数据”熊猫的人。 编辑 – 我希望如何工作的例子: 迭代地导入大型平面文件并将其存储在永久的磁盘数据库结构中。这些文件通常太大而不适合内存。 为了使用熊猫,我想阅读这些数据的子集(通常只是一些列),这些数据可以放在内存中。 我会通过对所选列执行各种操作来创建新列。 然后我必须将这些新列添加到数据库结构中。 我正试图找到执行这些步骤的最佳实践方式。阅读关于熊猫和pytables的链接似乎是添加一个新列可能是一个问题。 编辑 – 特别回应Jeff的问题: 我正在建立消费者信用风险模型。数据种类包括电话,SSN和地址特征; 财产价值; 像犯罪记录,破产等贬义性信息……我每天使用的数据集平均有近1,000至2,000个混合数据类型的字段:数字和字符数据的连续变量,名义变量和有序变量。我很少追加行,但是我执行许多操作来创建新列。 典型的操作涉及将使用条件逻辑的多个列组合成新的复合列。例如,if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'。这些操作的结果是我的数据集中每个记录的新列。 最后,我想将这些新列添加到磁盘数据结构中。我会重复第2步,使用交叉表和描述性统计数据探索数据,试图找到有趣,直观的模型关系。 一个典型的项目文件通常大约1GB。文件被组织成一行,其中包含消费者数据的记录。每行记录的每列都有相同的列数。情况总是如此。 创建新列时,按行排序是非常罕见的。但是,在创建报告或生成描述性统计信息时,对行进行子集的处理是非常常见的。例如,我可能想为特定的业务线创建一个简单的频率,比如零售信用卡。要做到这一点,除了我想报告的任何列之外,我只会选择那些业务线=零售的记录。但是,在创建新列时,我会提取所有数据行,并只提取操作所需的列。 建模过程要求我分析每一列,查找与某个结果变量有趣的关系,并创建描述这些关系的新复合列。我探索的专栏通常以小集合完成。例如,我将着重讨论一系列只是处理财产价值的20列,并观察它们与贷款违约的关系。一旦探索了这些内容并创建了新的专栏,我就会转向另一组专栏,说大学教育,然后重复这个过程。我正在做的是创建候选变量来解释我的数据和一些结果之间的关系。在这个过程的最后,我运用了一些学习技巧,从这些复合列中创建一个等式。 我很少会将行添加到数据集中。我几乎总是会创建新的列(统计/机器学习术语中的变量或功能)。 我经常以这种方式使用几十千兆字节的数据,例如我通过查询读取磁盘上的表格,创建数据并追加回来。 这是值得阅读的文档,并在这个线程的最后几个建议如何存储您的数据。 详细信息将影响您存储数据的方式,例如: 尽可能详细地提供信息; 我可以帮你开发一个结构。 数据大小,行数,列数,列类型; 你是追加行还是只追加列? 典型的操作将会是什么样子。例如,对列进行查询以选择一堆行和特定列,然后执行操作(内存中),创建新列,保存这些列。 (给出一个玩具的例子可以使我们提供更具体的建议。) 处理完之后,你会做什么?第2步是临时的还是可重复的? 输入平面文件:Gb中有多少个粗略的总大小。这些如何组织如记录?每个文件是否包含不同的字段,或者每个文件是否包含每个文件中的所有字段的记录? 你是否曾经根据标准选择行(记录)的子集(例如,选择字段A> 5的行)?然后做一些事情,或者你只是选择字段A,B,C与所有的记录(然后做一些事情)? 你是否在’所有专栏(分组)中工作,或者是否有很好的比例,你可能只用于报告(例如,你想保留数据,但不需要在列中显示直到最终结果时间)? 解 确保你至少0.10.1安装了熊猫。