pandas 读取 json 不适用于 MultiIndex

作者:编程家 分类: pandas 时间:2025-09-20

使用 pandas 库读取 json 数据是数据分析中常用的一种方法,但是在处理带有 MultiIndex 的数据时,pandas 的 json 读取功能并不适用。本文将介绍 MultiIndex 数据的概念,并提供一些解决方案来处理这种情况。

什么是 MultiIndex 数据?

MultiIndex 是 pandas 中一个重要的数据结构,它允许我们在一个轴上拥有多个索引层级。这在处理复杂的、多维度的数据时非常有用,例如在金融领域中,我们可能需要同时按照日期和股票代码来索引数据。

为什么 pandas 的 json 读取功能不适用于 MultiIndex 数据?

pandas 的 json 读取功能主要是针对简单的数据结构设计的,它默认将 json 文件中的每个键值对映射为一个列。而对于 MultiIndex 数据来说,它需要将多个索引层级映射为一个表格的行列结构,这就导致了 pandas 的 json 读取功能无法满足需求。

解决方案:

1. 使用 pandas 的 from_records 方法:我们可以使用 from_records 方法将 json 数据转换为 pandas 的 DataFrame 对象。在这个方法中,我们需要手动指定 MultiIndex 的层级结构,并将每个键值对转换为一个元组。然后,我们可以通过设置 index_col 参数将这些元组作为 DataFrame 的索引。

下面是一个示例代码:

python

import pandas as pd

# 读取 json 数据

data = [

{'date': '2022-01-01', 'code': 'AAPL', 'price': 100},

{'date': '2022-01-01', 'code': 'GOOG', 'price': 200},

{'date': '2022-01-02', 'code': 'AAPL', 'price': 150},

{'date': '2022-01-02', 'code': 'GOOG', 'price': 250},

]

df = pd.DataFrame.from_records(data)

# 设置 MultiIndex

df = df.set_index(['date', 'code'])

print(df)

上述代码中,我们首先读取了一个包含日期、股票代码和价格的 json 数据。然后,我们使用 from_records 方法将数据转换为 DataFrame,并设置了 MultiIndex。最后,我们打印了结果,可以看到数据成功按照日期和股票代码进行了索引。

2. 使用 json_normalize 方法:另一种处理 MultiIndex 数据的方法是使用 pandas 的 json_normalize 方法。这个方法可以将带有嵌套结构的 json 数据展平,并生成一个扁平化的 DataFrame。然后,我们可以使用 set_index 方法将需要作为索引的列设置为 MultiIndex。

下面是一个示例代码:

python

import pandas as pd

from pandas import json_normalize

# 读取 json 数据

data = [

{

'date': '2022-01-01',

'stocks': [{'code': 'AAPL', 'price': 100}, {'code': 'GOOG', 'price': 200}]

},

{

'date': '2022-01-02',

'stocks': [{'code': 'AAPL', 'price': 150}, {'code': 'GOOG', 'price': 250}]

}

]

# 展平 json 数据

df = json_normalize(data, 'stocks', ['date'])

# 设置 MultiIndex

df = df.set_index(['date', 'code'])

print(df)

上述代码中,我们读取了一个包含嵌套结构的 json 数据,其中每个日期对应一个股票代码和价格的列表。然后,我们使用 json_normalize 方法将数据展平,并将日期列作为额外的列。最后,我们使用 set_index 方法设置 MultiIndex。

虽然 pandas 的 json 读取功能不适用于 MultiIndex 数据,但我们可以使用其他方法来解决这个问题。本文介绍了两种常用的解决方案:使用 from_records 方法和使用 json_normalize 方法。这些方法可以帮助我们在处理 MultiIndex 数据时,便捷地读取和操作 json 文件。