如何用Pandas将CSV数据转换为指定格式的JSON?
实现步骤
首先要说明:你给出的目标JSON存在语法错误——同一个对象里重复出现VMName键,这不符合JSON规范。正确的结构应该是一个包含多个VM对象的数组,每个对象包含VMName和对应的tags数组,示例结构如下:
[ {"VMName": "vm101", "tags": [{"scope": "Environment", "tag": "Production"}, ...]}, {"VMName": "vm102", "tags": [...]} ]
以下是用Pandas实现的具体方案:
1. 读取CSV文件
假设你的CSV结构为:第一列是VMName,后续列依次是Environment、Application、Tier(列名对应标签的scope,列值对应tag内容),部分行可能存在空值(比如vm105的Tier为空)。用Pandas读取文件:
import pandas as pd import json # 替换成你的CSV文件路径 df = pd.read_csv("vm_tags.csv")
2. 转换每行数据为目标格式
定义处理函数,将DataFrame的每一行转换成包含VMName和tags的字典:
def parse_row(row): vm_item = {"VMName": row["VMName"], "tags": []} # 遍历除VMName外的所有列,生成标签项 for scope in df.columns[1:]: tag_content = row[scope] # 过滤空值,只保留有内容的标签 if pd.notna(tag_content) and tag_content.strip() != "": vm_item["tags"].append({"scope": scope, "tag": tag_content}) return vm_item
3. 生成最终JSON
将所有行转换后,输出格式化的JSON字符串:
# 应用函数到每一行,得到VM对象列表 vm_data_list = df.apply(parse_row, axis=1).tolist() # 生成带缩进的格式化JSON final_json = json.dumps(vm_data_list, indent=4) # 打印结果或保存到文件 print(final_json) # 保存到文件可执行: # with open("vm_tags_result.json", "w") as f: # f.write(final_json)
补充说明
- 代码会自动过滤空的标签列(比如vm105的Tier为空,不会生成对应的tag项);
- 如果你的CSV列名和假设不一致,只需调整
df.columns[1:]对应的列名范围即可。
内容的提问来源于stack exchange,提问作者Abdul Rasheed
相关产品推荐
相关产品推荐

