将 Python DataFrame 作为 CSV 写入 Azure Blob

Posted

技术标签:

【中文标题】将 Python DataFrame 作为 CSV 写入 Azure Blob【英文标题】:Write Python DataFrame as CSV into Azure Blob 【发布时间】:2018-10-05 11:47:06 【问题描述】:

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

    谁能告诉我如何将 Python 数据帧作为 csv 文件直接写入 Azure Blob 而不将其存储在本地?

    我尝试使用函数create_blob_from_textcreate_blob_from_stream,但它们都不起作用。

    将数据帧转换为字符串并使用create_blob_from_text 函数 将文件写入 blob,但作为纯字符串而不是 csv。

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

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

【问题讨论】:

查看此以将数据作为 csv 发送到 blob:***.com/questions/50923055/… 【参考方案1】:
    谁能告诉我如何将 Python 数据帧写成 csv 文件 直接进入 Azure Blob 而不将其存储在本地?

您可以使用pandas.DataFrame.to_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)

输出结果:

希望对你有所帮助。

【讨论】:

当我将 df.to_csv 存储在一个变量中时,它将它存储在一个本地目录中,并且该变量是 None 类型。我错过了什么吗? 如果您想将输出保存到子文件夹,请进行以下更改:blobService.create_blob_from_text('test1', 'folder1/folder2/OutFilePy.csv', output)【参考方案2】:

批准的答案对我不起作用,因为它取决于 azure-storage(自 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')

【讨论】:

更多信息在这里:github.com/Azure/azure-sdk-for-python/tree/main/sdk/storage/…

以上是关于将 Python DataFrame 作为 CSV 写入 Azure Blob的主要内容,如果未能解决你的问题,请参考以下文章

[python][pandas]DataFrame的基本操作

Python Spark-如何将空 DataFrame 输出到 csv 文件(仅输出标头)?

python 将Pandas Dataframe导出到csv(无索引)

将 Dataframe 保存到 csv 直接保存到 s3 Python

从两个熊猫系列(csv的列作为DataFrame)创建元素字典

pandas 中的大而持久的 DataFrame