我有一个非常大的数据帧另存为gzip文件。在保存数据之前,还需要对其进行大量操作。
您可以尝试将整个gzip数据帧转换为文本格式,将其保存到变量中,解析/清理数据,然后通过pandas.read_csv()保存为.csv文件。然而,这是非常耗费内存的。
我想逐行读取/解压缩这个文件(我认为这将是最节省内存的解决方案),解析它(例如,使用正则表达式re或pandas解决方案),然后将每一行保存到pandas数据帧中。
Python有一个gzip库来实现这一点:
with gzip.open('filename.gzip', 'rb') as input_file:
对于我的项目,我需要序列化pandas数据帧。这是序列化pandas数据帧的最佳方式。我有一个非常大的数据框架。我正在考虑以下格式,但每种格式都有saome限制。
Pickle : issues with very large dataframe.
hdf5 : issues with mixed datatypes
csv : ok, but have very large size
我正在dask中构建一个非常大的DAG,以提交给分布式调度器,在分布式调度器中,节点操作数据帧,而数据帧本身可能非常大。一种模式是,我有大约50-60个函数,用于加载数据和构造pandas数据帧,每个数据帧大小为几百MB (并且逻辑上表示单个表的分区)。我想将这些连接到图中下游节点的单个dask数据帧中,同时最小化数据移动。我像这样链接任务:
dfs = [dask.delayed(load_pandas)(i) for i in disjoint_set_of_dfs]
dfs = [dask.delayed(pandas_to_dask)(df) for df in dfs]
return
我有一个大空间分隔的输入文件input.csv,它无法保存在内存中:
## Header
# More header here
A B
1 2
3 4
如果我将iterator=True参数用于,那么它将返回一个TextFileReader / TextParser对象。这允许动态过滤文件,并且只选择列A大于2的行。
但是,如何在不需要再次循环所有数据的情况下,动态地向dataframe添加第三列呢?
具体来说,我希望列C等于A列乘以字典d中的值,字典d的值是B列的键,即C = A*d[B]。
目前我有这样的代码:
import pandas
d = {2: 2, 4: 3}
Te
我试图通过从hadoop集群中获取.csv数据并将其放入Pandas DataFrame来创建火花工作流。我能够从HDFS中提取数据并将其放入RDD中,但无法将其处理到Pandas Dataframe中。以下是我的代码:
import pandas as pd
import numpy as nm
A=sc.textFile("hdfs://localhost:9000/sales_ord_univ.csv") # this creates the RDD
B=pd.DataFrame(A) # this gives me the following error:pandas