Pandas解析JSON数据集

  • Post category:Python

Pandas解析JSON数据集

在 Pandas 中使用 read_json() 函数可以轻松地解析 JSON 数据集。以下是 Pandas 解析 JSON 数据集的常见步骤:

  1. 导入 Pandas 模块:
import pandas as pd
  1. 使用 read_json() 函数导入 JSON 数据集:
df = pd.read_json('data.json')
  1. 查看导入的数据集:
print(df.head())

默认情况下,read_json() 函数将数据解析为 DataFrame,其中每个 JSON 对象变为 DataFrame 的一行。如果 JSON 对象嵌套,则会以嵌套的方式表示为 Pandas 的嵌套结构。

例如,假设您有以下 JSON 数据集:

{
    "person": {
        "name": "John",
        "age": 30,
        "city": "New York"
    },
    "languages": ["Python", "Java", "C++"],
    "codes": [{"language": "Python", "experience": 5},
              {"language": "Java", "experience": 7}]
}

将其导入 DataFrame:

df = pd.read_json('data.json')

结果将会是以下 DataFrame:

                       person               languages                                       codes
age                        30                     NaN                                         NaN
city                 New York                     NaN                                         NaN
name                     John                     NaN                                         NaN
codes                     NaN                      NaN  [{'language': 'Python', 'experience': 5}, ...
languages                 NaN  [Python, Java, C++]                                         NaN

可以发现,person 以及其下的 nameagecity 被拆分成了 DataFrame 的第一行。languagescodes 是以列表的形式展示。codes 是一个嵌套的 JSON 对象,在 DataFrame 中以字典表示。我们可以使用 Pandas 的内置函数将其展开:

df = pd.json_normalize(data, record_path =['codes'], meta=['languages'])

结果将变成:

  language experience         languages
0   Python          5  [Python, Java, C++]
1     Java          7  [Python, Java, C++]

如此,我们就得到了一个扁平的 DataFrame,其中每行都代表了一个语言和它的使用经验。

还有一种常见的 JSON 数据集是时间序列(time series)数据,或者说是以时间为索引的数据。如下图所示:

{
    "2021-01-01": {"price": 100, "quantity": 20},
    "2021-01-02": {"price": 110, "quantity": 18},
    "2021-01-03": {"price": 105, "quantity": 22}
}

可以使用 orient='index' 参数将此类 JSON 数据集导入 DataFrame 并设置索引:

df = pd.read_json('time_series_data.json', orient='index')

结果将如下所示,第一列被转换为了索引列:

              price  quantity
2021-01-01     100        20
2021-01-02     110        18
2021-01-03     105        22

这样,我们就可以很方便地从时间序列中查找、选择数据。上述代码与以下代码等效:

df = pd.read_json('time_series_data.json')
df = df.T

其中 T 函数将 DataFrame 转置。

以上就是使用 Pandas 解析 JSON 数据集的步骤和注意事项。