Pandas解析JSON数据集
在 Pandas 中使用 read_json()
函数可以轻松地解析 JSON 数据集。以下是 Pandas 解析 JSON 数据集的常见步骤:
- 导入 Pandas 模块:
import pandas as pd
- 使用
read_json()
函数导入 JSON 数据集:
df = pd.read_json('data.json')
- 查看导入的数据集:
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
以及其下的 name
、age
、city
被拆分成了 DataFrame 的第一行。languages
和 codes
是以列表的形式展示。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 数据集的步骤和注意事项。