将多个文件从 Google Cloud Bucket 导入 Datalab 实例
Importing multiple files from Google Cloud Bucket to Datalab instance
我在 Google 云上设置了一个包含几百个 json 文件的存储桶,我正在尝试在数据实验室实例中使用它们 运行 python 3 .
因此,我可以使用
轻松地将它们视为对象
gcs list --objects gs://<BUCKET_NAME>
此外,我可以使用
阅读个人file/object
import google.datalab.storage as storage
import pandas as pd
from io import BytesIO
myBucket = storage.Bucket('<BUCKET_NAME')
data_csv = myBucket.object('<FILE_NAME.json')
uri = data_csv.uri
%gcs read --object $uri --variable data
df = pd.read_csv(BytesIO(data))
df.head()
(仅供参考,我知道我的示例正在将 json 读取为 csv,但让我们忽略它 - 我将自己过桥)
我想不通的是如何遍历存储桶并将所有 json 文件拉入 pandas...我该怎么做?这是我应该考虑的方式吗-有没有办法直接从 pandas 调用存储桶中的文件(因为它们已经被视为对象)?
作为一个额外的位 - 如果一个文件被保存为 json,但实际上不是那个结构怎么办?我该如何处理?
基本上,我想,我正在寻找 blob 包的功能,但是使用云桶 + 数据实验室。
非常感谢任何帮助。
这可以使用 Bucket.objects
来完成,其中 returns 是一个包含所有匹配文件的迭代器。指定前缀或将其留空以匹配存储桶中的所有文件。我用两个文件 countries1.csv
和 countries2.csv
:
做了一个例子
$ cat countries1.csv
id,country
1,sweden
2,spain
$ cat countries2.csv
id,country
3,italy
4,france
并使用了以下 Datalab 片段:
import google.datalab.storage as storage
import pandas as pd
from io import BytesIO
myBucket = storage.Bucket('BUCKET_NAME')
object_list = myBucket.objects(prefix='countries')
df_list = []
for object in object_list:
%gcs read --object $object.uri --variable data
df_list.append(pd.read_csv(BytesIO(data)))
concatenated_df = pd.concat(df_list, ignore_index=True)
concatenated_df.head()
这将输出组合的 csv:
id country
0 1 sweden
1 2 spain
2 3 italy
3 4 france
考虑到我使用 this approach 将所有 csv 文件合并到一个 Pandas 数据帧中,但您可能希望根据用例将它们加载到不同的数据帧中。如果你想检索存储桶中的所有文件,只需使用它:
object_list = myBucket.objects()
我在 Google 云上设置了一个包含几百个 json 文件的存储桶,我正在尝试在数据实验室实例中使用它们 运行 python 3 .
因此,我可以使用
轻松地将它们视为对象gcs list --objects gs://<BUCKET_NAME>
此外,我可以使用
阅读个人file/object import google.datalab.storage as storage
import pandas as pd
from io import BytesIO
myBucket = storage.Bucket('<BUCKET_NAME')
data_csv = myBucket.object('<FILE_NAME.json')
uri = data_csv.uri
%gcs read --object $uri --variable data
df = pd.read_csv(BytesIO(data))
df.head()
(仅供参考,我知道我的示例正在将 json 读取为 csv,但让我们忽略它 - 我将自己过桥)
我想不通的是如何遍历存储桶并将所有 json 文件拉入 pandas...我该怎么做?这是我应该考虑的方式吗-有没有办法直接从 pandas 调用存储桶中的文件(因为它们已经被视为对象)?
作为一个额外的位 - 如果一个文件被保存为 json,但实际上不是那个结构怎么办?我该如何处理?
基本上,我想,我正在寻找 blob 包的功能,但是使用云桶 + 数据实验室。
非常感谢任何帮助。
这可以使用 Bucket.objects
来完成,其中 returns 是一个包含所有匹配文件的迭代器。指定前缀或将其留空以匹配存储桶中的所有文件。我用两个文件 countries1.csv
和 countries2.csv
:
$ cat countries1.csv
id,country
1,sweden
2,spain
$ cat countries2.csv
id,country
3,italy
4,france
并使用了以下 Datalab 片段:
import google.datalab.storage as storage
import pandas as pd
from io import BytesIO
myBucket = storage.Bucket('BUCKET_NAME')
object_list = myBucket.objects(prefix='countries')
df_list = []
for object in object_list:
%gcs read --object $object.uri --variable data
df_list.append(pd.read_csv(BytesIO(data)))
concatenated_df = pd.concat(df_list, ignore_index=True)
concatenated_df.head()
这将输出组合的 csv:
id country
0 1 sweden
1 2 spain
2 3 italy
3 4 france
考虑到我使用 this approach 将所有 csv 文件合并到一个 Pandas 数据帧中,但您可能希望根据用例将它们加载到不同的数据帧中。如果你想检索存储桶中的所有文件,只需使用它:
object_list = myBucket.objects()