我有一个CSV文件,我正在尝试使用Pandas将其转换为JSON。它具有多个标题,但为简单起见,我们只说它具有3:“区域”,“州”和“销售人员”。三列三行,其中经常有重复值(状态名称等)。
我理想的结果是:
{
"salesperson": [
{
"name": "John Doe",
"values": [
{
"region": "North America",
"state": "Connecticut"
},
{
"region": "North America",
"state": "Vermont"
}
]
},
{
"name": "Jane Doe",
"values": [
{
"region": "North America",
"state": "New York"
},
{
"region": "North America",
"state": "New Hampshire"
}
]
}
]
}
这是我目前拥有的用于读取数据并将其转换为JSON的功能。
df = pd.read_csv('Foo.csv', encoding="ISO-8859-1",
escapechar='\\')
result = (df.groupby(['salesperson'])
.apply(lambda x: x.to_dict('r'))
.to_json(orient='table')
)
return result
.to_json(orient='table')
很近,它给了我
"data": [
{
"salesperson": "John Doe",
"values": [
{
"region": "North America",
"state": "Connecticut",
"salesperson": "John Doe"
},
但是,“销售人员”仍在“值”中。我已经尝试过
result = (df.groupby(['salesperson'])
.apply(lambda x: x.to_dict('r'))
.drop('salesperson')
.to_json(orient='table')
)
但这似乎不是正确的方法。
我不确定如何告诉它使用“销售人员”作为索引并将其从输出中删除,而无需在创建JSON文件后对其进行实际编辑。
答案 0 :(得分:0)
下面的代码删除不需要的密钥。
步骤1:
分配一个变量。
data = {
"salesperson": "John Doe",
"values": [
{
"region": "North America",
"state": "Connecticut",
"salesperson": "John Doe"
}]
}
第2步: 删除键
del data['salesperson']
输出:
答案 1 :(得分:0)
在应用drop
之前,我必须对密钥应用to_dict()
result = df.groupby(df.salesperson).apply(
lambda x: x.drop('salesperson', 1).to_dict('records')).to_json(orient='index')
这会将键从结果JSON值中删除,同时将其保留为索引。