如何将Azure SavingsPlanUtilizationSummary数据按列导出为CSV并格式化日期?
解决Azure SavingsPlanUtilizationSummary转DataFrame拆分列及日期格式化问题
核心思路
Azure的SavingsPlanUtilizationSummary是SDK生成的模型对象,直接转DataFrame会被识别为单个字典列。需要先将每个对象转为标准字典,再利用pandas的功能拆分列,同时单独处理日期格式。
具体实现代码
import pandas as pd from datetime import datetime # 假设response是从Azure Cost Management API获取的结果 utilization_data = [] for item in response.value: # 将Azure模型对象转换为可序列化的字典 item_dict = item.as_dict() # 格式化usage_date字段为YYYY-MM-DD格式 if 'usage_date' in item_dict: date_val = item_dict['usage_date'] if isinstance(date_val, datetime): # 处理datetime对象 item_dict['usage_date'] = date_val.strftime('%Y-%m-%d') elif isinstance(date_val, str) and 'T' in date_val: # 处理ISO格式字符串(如"2024-06-01T00:00:00Z") item_dict['usage_date'] = date_val.split('T')[0] utilization_data.append(item_dict) # 转换为DataFrame,自动拆分字典为独立列 # 如果存在嵌套字典字段,改用pd.json_normalize(utilization_data)展开嵌套结构 df = pd.DataFrame(utilization_data) # 导出为CSV文件 df.to_csv('savings_plan_utilization.csv', index=False, encoding='utf-8')
关键说明
- 模型转字典:Azure SDK的所有模型类都内置
as_dict()方法,能将对象的所有属性转为标准Python字典,让pandas可以识别并拆分为列。 - 日期格式化:针对
usage_date可能的两种格式(datetime对象/ISO字符串)做兼容处理,确保输出统一的YYYY-MM-DD格式。 - 嵌套字段处理:如果返回的字典包含嵌套结构(比如某个字段是子字典),替换
pd.DataFrame()为pd.json_normalize(),可以自动将嵌套字段展开为扁平列(例如parent.child会变成parent_child列名)。
内容的提问来源于stack exchange,提问作者learningtocode
相关产品推荐
相关产品推荐

