Pandas 将.txt文件从Google云存储加载到

Pandas 将.txt文件从Google云存储加载到,pandas,google-cloud-functions,google-cloud-storage,Pandas,Google Cloud Functions,Google Cloud Storage,我正试图通过pd.read\u csv将一个.txt文件从GCS存储桶加载到熊猫df中。当我在本地机器上运行这段代码时(从本地目录获取.txt文件),它工作得非常好。然而,当我尝试在一个云函数中运行代码,访问同一个.txt文件,但从一个GCS存储桶中访问时,我得到一个“TypeError:无法在类似字节的对象上使用字符串模式” 唯一不同的是,我通过GCS bucket访问.txt文件,因此它是一个bucket对象(Blob),而不是普通文件。在执行pd.read\u csv之前,我需要先将blo

我正试图通过pd.read\u csv将一个.txt文件从GCS存储桶加载到熊猫df中。当我在本地机器上运行这段代码时(从本地目录获取.txt文件),它工作得非常好。然而,当我尝试在一个云函数中运行代码,访问同一个.txt文件,但从一个GCS存储桶中访问时,我得到一个“TypeError:无法在类似字节的对象上使用字符串模式”

唯一不同的是,我通过GCS bucket访问.txt文件,因此它是一个bucket对象(Blob),而不是普通文件。在执行pd.read\u csv之前,我需要先将blob作为字符串或类似文件的对象下载吗?代码如下

def stage1_cogs_vfc(data, context):  

    from google.cloud import storage
    import pandas as pd
    import dask.dataframe as dd
    import io
    import numpy as np


    start_bucket = 'my_bucket'   
    storage_client = storage.Client()
    source_bucket = storage_client.bucket(start_bucket)

    df = pd.DataFrame()

    file_path = 'gs://my_bucket/SCE_Var_Fact_Costs.txt'
    df = pd.read_csv(file_path,skiprows=12, encoding ='utf-8', error_bad_lines= False, warn_bad_lines= False , header = None ,sep = '\s+|\^+',engine='python')

回溯(最近一次呼叫最后一次):


我发现了类似的情况

我还注意到在网上:

source_bucket = storage_client.bucket(source_bucket)
您将“source_bucket”用于变量名和参数。我建议换一个


但是,我想您希望查看此文档以了解与API本身相关的任何其他问题:

我发现了类似的情况

我还注意到在网上:

source_bucket = storage_client.bucket(source_bucket)
您将“source_bucket”用于变量名和参数。我建议换一个


但是,我想你想看看这个文档,了解更多关于API本身的问题:

基于@K_immer的点是我的更新代码,包括读取'Dask'df

def stage1_cogs_vfc(data, context):  

    from google.cloud import storage
    import pandas as pd
    import dask.dataframe as dd
    import io
    import numpy as np
    import datetime as dt


    start_bucket = 'my_bucket'
    destination_path = 'gs://my_bucket/ddf-*_cogs_vfc.csv'

    storage_client = storage.Client()
    bucket = storage_client.get_bucket(start_bucket)

    blob = bucket.get_blob('SCE_Var_Fact_Costs.txt')

    df0 = pd.DataFrame()

    file_path = 'gs://my_bucket/SCE_Var_Fact_Costs.txt'
    df0 = dd.read_csv(file_path,skiprows=12, dtype=object ,encoding ='utf-8', error_bad_lines= False, warn_bad_lines= False , header = None ,sep = '\s+|\^+',engine='python')


    df7 = df7.compute() # converts dask df to pandas df

    # then do your heavy ETL stuff here using pandas...


基于@K_immer的观点,我更新了代码,其中包括读取“Dask”df

def stage1_cogs_vfc(data, context):  

    from google.cloud import storage
    import pandas as pd
    import dask.dataframe as dd
    import io
    import numpy as np
    import datetime as dt


    start_bucket = 'my_bucket'
    destination_path = 'gs://my_bucket/ddf-*_cogs_vfc.csv'

    storage_client = storage.Client()
    bucket = storage_client.get_bucket(start_bucket)

    blob = bucket.get_blob('SCE_Var_Fact_Costs.txt')

    df0 = pd.DataFrame()

    file_path = 'gs://my_bucket/SCE_Var_Fact_Costs.txt'
    df0 = dd.read_csv(file_path,skiprows=12, dtype=object ,encoding ='utf-8', error_bad_lines= False, warn_bad_lines= False , header = None ,sep = '\s+|\^+',engine='python')


    df7 = df7.compute() # converts dask df to pandas df

    # then do your heavy ETL stuff here using pandas...


谢谢你指出这一点-我已经更新了我的代码,但问题仍然存在。你是否尝试第一个链接上的步骤?我在这里也发现了类似的东西:有趣的是,我设法将其读入DASK df(通过您提供的链接),但当我使用更多基于pandas的ETL操作(如iloc等)时,DASK无法执行这些操作。不过你的建议很有用-谢谢。事实上。。。我通过dask读入数据,然后将dask df转换为pandas df(通过`df=daskdf.compute()`为了做更多的ETL繁重工作。工作非常完美。感谢您指出-我已经更新了我的代码,但问题仍然存在。您是否尝试了第一个链接上的步骤?我在这里也发现了类似的内容:有趣的是,我设法将其读入DASK df(通过您提供的链接)但是当我进行更多基于pandas的ETL操作(如iloc等)时,dask无法完成这些操作。不过你的建议很有用-谢谢。事实上…我通过dask读入,然后将dask df转换为pandas df(通过`df=daskdf.compute()`来完成更多ETL繁重的工作。工作非常完美。