You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取Azure存储多JSON文件时如何拼接合并pandas DataFrame

问题原因

你的代码有两个核心问题:

  1. 循环读取每个blob文件时,每次都直接对df变量重新赋值,循环结束后df仅保存最后一个读取到的JSON文件的数据,根本没有完成多文件数据合并。
  2. 从你输出的DataFrame元信息可以看到,部分文件的列名带隐藏的首尾空格(比如第一份数据的Date列名后多了空格),列名不匹配会导致过滤条件无法命中对应值,返回空结果。
修复方案

按以下逻辑调整代码即可完成所有文件数据的拼接,同时解决过滤失效问题:

  • 循环开始前初始化一个空列表,临时存储每个单文件读取生成的DataFrame
  • 读取每个文件生成临时df后,先清洗列名,去掉所有列名的首尾空白字符
  • 所有文件读取完成后,用pandas.concat一次性合并所有临时df,得到完整的总数据集
  • 做日期类过滤前,先把Date列转为标准datetime格式,避免字符串匹配异常
修复后完整代码
from azure.storage.blob import BlobServiceClient, ContainerClient
import json
import pandas as pd
from datetime import datetime
import uuid

connect_str = ""
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_name = "raw"
container_client = blob_service_client.get_container_client(container_name)
blob_list = container_client.list_blobs(name_starts_with="path")

# 初始化列表存每个文件的临时df
df_list = []

for blob in blob_list:
    blob_client = container_client.get_blob_client(blob)
    streamdownloader = blob_client.download_blob()
    file_data = json.loads(streamdownloader.readall())
    temp_df = pd.DataFrame(file_data)
    # 清洗列名,去掉首尾空格
    temp_df.columns = temp_df.columns.str.strip()
    df_list.append(temp_df)

# 合并所有数据
final_df = pd.concat(df_list, ignore_index=True)

# 可选:把Date列转成日期格式,方便后续过滤
final_df['Date'] = pd.to_datetime(final_df['Date'], format="%d-%b-%Y")

# 现在可以正常执行过滤操作,比如过滤6月15日的数据
filter_result = final_df[final_df['Date'] == "2022-06-15"]
print(filter_result)

注意:如果你的路径下存在非JSON格式的blob文件,需要在循环里加异常捕获,避免读取报错中断。

内容的提问来源于stack exchange,提问作者SanjanaSanju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:45:35