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

How do I open a gzip file in Google Datalab?

我有一个包含 file.csv.gz 的桶。它大约有 210MB,我想把它读入 pandas。 有人知道怎么做吗?

对于非 gz,这有效:

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

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

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

"%%gcs read" 将所有内容加载为字符串。由于您的压缩大小已经是 210MB,无论如何将其全部作为字符串读取可能不是一个好主意。

对于您的情况,也许您可​​以考虑使用 BigQuery 命令。 "%%bq" 支持压缩的 csv(仅 .gz 格式)作为数据源。以下显示如何操作:

单元格 1 -- 定义数据源:

%%bq 数据源 --name mycsv --path gs://b/o.csv.gz --compressed --format csv 模式: - 姓名:url 类型:字符串 - 名称:标签 类型:字符串

单元格 2 -- 定义查询:

%%bq query --datasources mycsv --name myquery SELECT * 来自 mycsv

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

df = %%bq execute --query myquery --to-dataframe

在单元格 2 中,您可能想要添加一些过滤器并且 select 只添加您想要的列。否则您会将整个文件加载到内存中,这可能太大了。

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

您仍然可以使用 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