如何将指定嵌套JSON文件转换为Pandas DataFrame?
将JSON转换为Pandas DataFrame的方法
针对你提供的JSON结构,有两种常用的转换方式,可根据需求选择:
方式一:按时间周期拆分(推荐,适合分析不同时间点的FGI数据)
这种方式会把fgi下的每个时间节点(now、previousClose等)作为单独一行,同时保留全局的更新时间信息。
步骤:
- 导入所需库
import pandas as pd import json
- 读取JSON文件
# 替换为你的JSON文件实际路径 with open('fgi_data.json', 'r') as file: json_data = json.load(file)
- 转换
fgi部分为DataFrame
# 以字典键作为行索引生成DataFrame fgi_df = pd.DataFrame.from_dict(json_data['fgi'], orient='index') # 重置索引并将原索引命名为时间周期列 fgi_df = fgi_df.reset_index().rename(columns={'index': 'time_period'})
- 添加全局更新时间信息
# 将lastUpdated的两个字段批量添加到DataFrame的每一行 fgi_df['last_updated_epoch'] = json_data['lastUpdated']['epochUnixSeconds'] fgi_df['last_updated_human'] = json_data['lastUpdated']['humanDate']
最终DataFrame结构示例:
| time_period | value | valueText | last_updated_epoch | last_updated_human |
|---|---|---|---|---|
| now | 78 | Extreme Greed | 1686580918 | 2023-06-12T14:41:58.000Z |
| previousClose | 77 | Extreme Greed | 1686580918 | 2023-06-12T14:41:58.000Z |
| oneWeekAgo | 73 | Greed | 1686580918 | 2023-06-12T14:41:58.000Z |
| oneMonthAgo | 57 | Greed | 1686580918 | 2023-06-12T14:41:58.000Z |
| oneYearAgo | 40 | Fear | 1686580918 | 2023-06-12T14:41:58.000Z |
方式二:完全展平为单行
如果不需要拆分时间周期,只想把所有嵌套数据展平成一行,可使用pd.json_normalize():
import pandas as pd import json with open('fgi_data.json', 'r') as file: json_data = json.load(file) # 自动展平所有嵌套JSON结构 flat_df = pd.json_normalize(json_data)
生成的DataFrame列名将以层级形式命名,例如lastUpdated.epochUnixSeconds、fgi.now.value、fgi.previousClose.valueText等,所有数据集中在同一行。
内容的提问来源于stack exchange,提问作者jacques
相关产品推荐
相关产品推荐

