我试图读取一个csv文件目前在谷歌云存储桶到熊猫数据帧。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from io import BytesIO
from google.cloud import storage
storage_client = storage.Client()
bucket = storage_client.get_bucket('createbucket123')
blob = bucket.blob('my.csv')
path = "gs://createbucket123/my.csv"
df = pd.read_csv(path)
它显示以下错误消息:
FileNotFoundError: File b'gs://createbucket123/my.csv' does not exist
我做错了什么,我无法找到任何不涉及谷歌数据实验室的解决方案?
从pandas的0.24版开始,read\u csv
支持直接从Google云存储读取。只需提供指向bucket的链接,如下所示:
df = pd.read_csv('gs://bucket/your_path.csv')
然后,read_csv
将使用gcsfs
模块读取Dataframe,这意味着必须安装它(否则您将获得指向缺失依赖项的异常)。
为了完整起见,我留下另外三个选择。
我将在下面介绍它们。
我写了一些方便的函数从谷歌存储阅读。为了使其更具可读性,我添加了类型注释。如果你碰巧在Python 2上,只需删除这些,代码就会照样工作。
假设您获得授权,它在公共和私人数据集上同样有效。在这种方法中,您不需要先将数据下载到本地驱动器。
如何使用它:
fileobj = get_byte_fileobj('my-project', 'my-bucket', 'my-path')
df = pd.read_csv(fileobj)
守则:
from io import BytesIO, StringIO
from google.cloud import storage
from google.oauth2 import service_account
def get_byte_fileobj(project: str,
bucket: str,
path: str,
service_account_credentials_path: str = None) -> BytesIO:
"""
Retrieve data from a given blob on Google Storage and pass it as a file object.
:param path: path within the bucket
:param project: name of the project
:param bucket_name: name of the bucket
:param service_account_credentials_path: path to credentials.
TIP: can be stored as env variable, e.g. os.getenv('GOOGLE_APPLICATION_CREDENTIALS_DSPLATFORM')
:return: file object (BytesIO)
"""
blob = _get_blob(bucket, path, project, service_account_credentials_path)
byte_stream = BytesIO()
blob.download_to_file(byte_stream)
byte_stream.seek(0)
return byte_stream
def get_bytestring(project: str,
bucket: str,
path: str,
service_account_credentials_path: str = None) -> bytes:
"""
Retrieve data from a given blob on Google Storage and pass it as a byte-string.
:param path: path within the bucket
:param project: name of the project
:param bucket_name: name of the bucket
:param service_account_credentials_path: path to credentials.
TIP: can be stored as env variable, e.g. os.getenv('GOOGLE_APPLICATION_CREDENTIALS_DSPLATFORM')
:return: byte-string (needs to be decoded)
"""
blob = _get_blob(bucket, path, project, service_account_credentials_path)
s = blob.download_as_string()
return s
def _get_blob(bucket_name, path, project, service_account_credentials_path):
credentials = service_account.Credentials.from_service_account_file(
service_account_credentials_path) if service_account_credentials_path else None
storage_client = storage.Client(project=project, credentials=credentials)
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(path)
return blob
gcsfs是“谷歌云存储的Pythonic文件系统”。
如何使用它:
import pandas as pd
import gcsfs
fs = gcsfs.GCSFileSystem(project='my-project')
with fs.open('bucket/path.csv') as f:
df = pd.read_csv(f)
Dask“为分析提供高级并行性,为您喜爱的工具提供大规模性能”。当你需要在Python中处理大量数据时,这是非常好的。Dask试图模仿大部分的熊猫
API,使其易于新用户使用。
这是read_csv
如何使用它:
import dask.dataframe as dd
df = dd.read_csv('gs://bucket/data.csv')
df2 = dd.read_csv('gs://bucket/path/*.csv') # nice!
# df is now Dask dataframe, ready for distributed processing
# If you want to have the pandas version, simply:
df_pd = df.compute()
问题内容: 我正在查询一个SQL数据库,我想使用熊猫来处理数据。但是,我不确定如何移动数据。以下是我的输入和输出。 问题答案: 答案更简短
我尝试运行一个数据流管道,使用DirectPipelineRunner从本地计算机(windows)读取数据,并写入Google云存储。作业失败,出现以下指定FileNotFoundException的错误(因此我认为数据流作业无法读取我的位置)。我正在本地计算机上运行作业,以运行我创建的基于GCP的模板。我可以在GCP数据流仪表板中看到它,但由于以下错误而失败。请帮忙。我还尝试了本地机器的IP或
null
我正在看新的谷歌云数据存储,看起来很棒。但有件事我不明白。。。它应该替代谷歌应用引擎数据存储吗?我如何在GAE内部使用它?它们之间有什么区别? 我在Java有一个GAE应用程序,它使用3个实体,每个实体都有数千行,我需要经常做连接...
我需要从压缩的GCS文件中解析json数据,因为文件扩展名是。gz,所以它应该由dataflow正确地重新组织和处理,但是作业日志打印出不可读的字符和未处理的数据。当我处理未压缩的数据时,它工作得很好。我使用以下方法映射/解析JSON: 你知道原因是什么吗? 运行时的配置: 输入文件名示例:file.gz,命令gsutil ls-l gs://bucket/input/file.gz grep c
storage和colab之间的链接如下所示: