当前位置: 首页 > 知识库问答 >
问题:

将Python DataFrame作为CSV写入Azure Blob

蒲魁
2023-03-14

我有两个关于从/到Azure blob存储读取和写入Python对象的问题。

>

  • 有人能告诉我如何将Python数据框作为csv文件直接写入Azure Blob而不在本地存储吗?

    我尝试使用函数“从\u text创建\u blob\u”和“从\u stream创建\u blob\u”,但它们都不起作用。

    将数据帧转换为字符串,并使用create\u blob\u from\u text函数将文件写入blob,但作为普通字符串,而不是csv。

    df_b = df.to_string()
    block_blob_service.create_blob_from_text('test', 'OutFilePy.csv', df_b)  
    

    如何将Azure blob存储中的json文件直接读取到Python中?

  • 共有2个答案

    宋凌龙
    2023-03-14

    批准的答案对我不起作用,因为它取决于Azure存储(截至2021年已弃用/遗留)包。我将其更改如下:

    from azure.storage.blob import *
    import dotenv
    import io
    import pandas as pd
    
    dotenv.load_dotenv()
    blob_block = ContainerClient.from_connection_string(
        conn_str=os.environ["CONNECTION_STRING"],
        container_name=os.environ["CONTAINER_NAME"]
        )
    output = io.StringIO()
    partial = df.DataFrame()
    output = partial.to_csv(encoding='utf-8')
    blob_block.upload_blob(name, output, overwrite=True, encoding='utf-8')
    
    公孙河
    2023-03-14
    1. 有人能告诉我如何将Python数据帧作为csv文件直接写入Azure Blob而无需将其存储在本地吗?

    你可以用熊猫。数据帧。to\u csv方法。

    示例代码:

    from azure.storage.blob import (
        BlockBlobService
    )
    import pandas as pd
    import io
    
    output = io.StringIO()
    head = ["col1" , "col2" , "col3"]
    l = [[1 , 2 , 3],[4,5,6] , [8 , 7 , 9]]
    df = pd.DataFrame (l , columns = head)
    print(df)
    output = df.to_csv (index_label="idx", encoding = "utf-8")
    print(output)
    
    accountName = "***"
    accountKey = "***"
    containerName = "test1"
    blobName = "test3.json"
    
    blobService = BlockBlobService(account_name=accountName, account_key=accountKey)
    
    blobService.create_blob_from_text('test1', 'OutFilePy.csv', output)
    

    输出结果:

    2、如何将Azure blob存储中的json文件直接读取到Python中?

    示例代码:

    from azure.storage.blob import (
        BlockBlobService
    )
    
    accountName = "***"
    accountKey = "***"
    containerName = "test1"
    blobName = "test3.json"
    
    blobService = BlockBlobService(account_name=accountName, account_key=accountKey)
    
    result = blobService.get_blob_to_text(containerName,blobName)
    
    print(result.content)
    

    输出结果:

    希望对你有帮助。

     类似资料:
    • 问题内容: 我正在用csv快速编写以下数据: 当我完成解析第一个文件并启动第二个文件时,我想添加更多列,如下所示: parsed STEP ID ELEMENT_ID Fatigue SW Fatigue F1 Fatigue F3 Fatigue SW Fatigue F1 Fatigue F3 Step 10 10000 1.30E-07 1.51E-06 2.15E-06 1.30E-07

    • 我正在尝试使用Spark-CSV(https://github.com/databricks/Spark-CSV)将DataFrame写成CSV文件 而不是 伦敦 哥本哈根 莫斯科

    • 问题内容: 将结构转储到提供的csv文件中的惯用golang方法是什么?我在一个func里面,我的结构作为接口{}传递: 为什么要使用界面{}?-从JSON读取数据,可能会返回一些不同的结构,因此尝试编写足够通用的函数。 我的类型的一个例子: 问题答案: 如果您使用具体类型,将会容易得多。您可能想要使用该软件包,这是一个相关示例;https://golang.org/pkg/encoding/cs

    • 我有一个将一个项目映射到它的属性,例如,其中属性是从不同的数据源检索的。 例如,我们从数据库中获得属性,而从Solr中获得属性。 当我最初从DB检索时,我使用以避免阻塞主线程,如下所示: 然后通过对Solr的异步调用将其链接起来,这样我最终将有一个异步Hashmap将项映射到它们的属性,即(因此我循环遍历Hashmap的键,并用新属性更新值,使用访问旧属性)。 最后,我将数据映射到csv,这就是问

    • 问题内容: 我有一个pandas数据框,我想将其写入CSV文件。我正在使用以下方法: 并得到错误: 有什么方法可以轻松解决此问题(即我的数据框中有Unicode字符)吗?有没有一种方法可以使用例如“ to-tab”方法(我认为不存在)写入制表符分隔文件而不是CSV? 问题答案: 要用制表符分隔,可以使用参数: 要使用特定的编码(例如),请使用参数:

    • 问题内容: 我正在尝试将嵌套的字典写入.csv文件。这是一个简单的示例: 这使我得到一个包含两列的表:第一个包含; 第二个包含[2,1,1](或子词典中的相应值)。我想要一个有四列的表:一列对应的列表元素,然后三列对应的列表元素。 问题答案: 更改: 至: 否则,您会尝试向csv编写类似的内容,而您的意思是。 如Padraic所述,您可能希望更改为或避免随机行为。