如何在Google Datalab中打开gzip文件?

时间:2017-11-19 09:06:46

标签: google-cloud-datalab

我有一个包含file.csv.gz的存储桶。它大约210MB,我想把它读成大熊猫。 有谁知道怎么做?

对于非gz,这有效:

%gcs read --object gs://[bucket-name]/[path/to/file.csv] --variable csv

# Store in a pandas dataframe
df = pd.read_csv(StringIO(csv))

2 个答案:

答案 0 :(得分:1)

您仍然可以使用pandas.read_csv,但必须指定 compression ='gzip',并从 pandas.compat 导入StringIO。

我在我的Datalab中用一个小文件尝试了下面的代码,它对我有用。

%gcs read --object gs://[bucket-name]/[path/to/file.csv] --variable my_file 

import pandas as pd
from pandas.compat import StringIO

df = pd.read_csv(StringIO(my_file), compression='gzip')
df

答案 1 :(得分:0)

" %% gcs read"命令不适用于压缩数据。

" %% gcs read"将所有内容加载为字符串。由于您的压缩大小已经是210MB,因此无论如何都不能将它全部读成字符串。

在您的情况下,也许您可​​以考虑BigQuery命令。 " %% BQ"支持压缩的csv(仅.gz格式)作为数据源。以下显示了如何执行此操作:

单元格1 - 定义数据源:

%% bq datasource --name mycsv --path gs://b/o.csv.gz --compressed --format csv 模式:    - name:url     类型:STRING    - 名称:标签     类型:STRING

单元格2 - 定义查询:

%% bq query --datasources mycsv --name myquery SELECT * FROM mycsv

单元格3: - 运行查询并将其保存到DataFrame:

df = %% bq执行--query myquery --to-dataframe

在单元格2中,您可能希望添加一些过滤器并仅选择所需的列。否则,您将整个文件加载到内存中,这可能太大了。

请注意,上面的命令调用BigQuery操作,因此需要在项目中启用BigQuery API,并且还可能产生一些成本。