使用pandas从Google云存储读取CSV文件

使用pandas从Google云存储读取CSV文件,pandas,google-cloud-storage,dask,Pandas,Google Cloud Storage,Dask,我正在尝试将一组CSV文件从谷歌云存储读取到熊猫数据帧中,如中所述 导入gcfs时显示以下错误消息。“dask”和“gcsfs”软件包已安装在我的机器上;但是,无法消除以下错误 File "C:\Program Files\Anaconda3\lib\site-packages\gcsfs\dask_link.py", line 121, in register dask.bytes.core._filesystems['gcs'] = DaskGCSFileSystem AttributeE

我正在尝试将一组CSV文件从谷歌云存储读取到熊猫数据帧中,如中所述

导入gcfs时显示以下错误消息。“dask”和“gcsfs”软件包已安装在我的机器上;但是,无法消除以下错误

File "C:\Program Files\Anaconda3\lib\site-packages\gcsfs\dask_link.py", line 
121, in register
dask.bytes.core._filesystems['gcs'] = DaskGCSFileSystem
AttributeError: module 'dask.bytes.core' has no attribute '_filesystems'

无论是直接从地面军事系统读取还是通过Dask读取,这项技术已经在其他地方得到了测试,并被证明是有效的。您可能希望尝试导入gcsfs和dask,查看是否可以看到
\u文件系统
,并查看其内容

In [1]: import dask.bytes.core

In [2]: dask.bytes.core._filesystems
Out[2]: {'file': dask.bytes.local.LocalFileSystem}

In [3]: import gcsfs

In [4]: dask.bytes.core._filesystems
Out[4]:
{'file': dask.bytes.local.LocalFileSystem,
 'gcs': gcsfs.dask_link.DaskGCSFileSystem,
 'gs': gcsfs.dask_link.DaskGCSFileSystem}

到目前为止,如果gcsfs无法在Dask上注册,它的性能会更好,因此更新可能会解决您的问题。

这已在其他地方进行了测试,并且可以在其他地方使用,无论是直接从GCS读取还是通过Dask读取。您可能希望尝试导入gcsfs和dask,查看是否可以看到
\u文件系统
,并查看其内容

In [1]: import dask.bytes.core

In [2]: dask.bytes.core._filesystems
Out[2]: {'file': dask.bytes.local.LocalFileSystem}

In [3]: import gcsfs

In [4]: dask.bytes.core._filesystems
Out[4]:
{'file': dask.bytes.local.LocalFileSystem,
 'gcs': gcsfs.dask_link.DaskGCSFileSystem,
 'gs': gcsfs.dask_link.DaskGCSFileSystem}

到目前为止,如果gcsfs无法向Dask注册,则其性能会更好,因此更新可能会解决您的问题。

gcsfs和
Dask
包之间似乎存在一些错误或冲突。事实上,代码工作不需要
dask
库。代码运行的最低配置是安装库(我正在发布最新版本):

另外,
文件名
已经包含
.csv
扩展名。因此,将第9行更改为:

temp=pd.read\u csv('gs://'+bucket\u name+'/'+filename,encoding='utf-8')


有了这些更改,我运行了您的代码,它可以正常工作。我建议您:

似乎
gcsfs
dask
包之间存在一些错误或冲突。事实上,代码工作不需要
dask
库。代码运行的最低配置是安装库(我正在发布最新版本):

另外,
文件名
已经包含
.csv
扩展名。因此,将第9行更改为:

temp=pd.read\u csv('gs://'+bucket\u name+'/'+filename,encoding='utf-8')


有了这些更改,我运行了您的代码,它可以正常工作。我建议您:

在上面的文本中,有几点需要指出: 需要定义bucket\u名称和前缀。 并且每次对文件名的迭代都应该在每个数据帧上追加数据。否则,它是最后一个被连接的

from google.cloud import storage
import pandas as pd

storage_client = storage.Client()

buckets_list = list(storage_client.list_buckets())
bucket_name='my_bucket'
bucket = storage_client.bucket(bucket_name)
blobs = bucket.list_blobs()

list_temp_raw = []
for file in blobs:
    filename = file.name
    temp = pd.read_csv('gs://'+bucket_name+'/'+filename, encoding='utf-8')
    print(filename, temp.head())
    list_temp_raw.append(temp)

df = pd.concat(list_temp_raw)

在上面的文本中,有几点需要指出: 需要定义bucket\u名称和前缀。 并且每次对文件名的迭代都应该在每个数据帧上追加数据。否则,它是最后一个被连接的

from google.cloud import storage
import pandas as pd

storage_client = storage.Client()

buckets_list = list(storage_client.list_buckets())
bucket_name='my_bucket'
bucket = storage_client.bucket(bucket_name)
blobs = bucket.list_blobs()

list_temp_raw = []
for file in blobs:
    filename = file.name
    temp = pd.read_csv('gs://'+bucket_name+'/'+filename, encoding='utf-8')
    print(filename, temp.head())
    list_temp_raw.append(temp)

df = pd.concat(list_temp_raw)

谢谢我已经安装了所有三个库。如果使用conda而不是pip来创建一个新环境,这有关系吗?我认为这不会有什么不同。我希望它对你有用。谢谢。我已经安装了所有三个库。如果使用conda而不是pip来创建一个新环境,这有关系吗?我认为这不会有什么不同。我希望它能为你工作。注意:gcsfs在列出远程存储上的文件名方面做得很好,你不需要另外使用google客户端。谢谢你的帮助回答。然而,在我的例子中,导入gcsfs或dask会抛出上述AttributeError。这很奇怪,因为我都安装在我的windows计算机上。我的是0.2.1,这是最新的。你可以尝试从github master通过pip安装吗?注意:gcsfs可以很好地列出远程存储上的文件名,你不需要另外使用google客户端。谢谢你的帮助回答。然而,在我的例子中,导入gcsfs或dask会抛出上述AttributeError。这很奇怪,因为我都安装在我的windows机器上。我的是0.2.1,这是最新的。你可以尝试从github master通过pip安装吗?