【发布时间】:2022-01-01 08:33:03
【问题描述】:
我尝试制作一个读取多个 json 文件的数据框,但程序只读取其中一个文件。我得到了我想要的数据,但只能从这个文件中得到。你知道我怎样才能读取所有这些文件并将它们连接成一个 DataFrame 吗?当我运行这个程序时,我没有收到任何错误。 代码如下:
import json
import pandas as pd
import os
path = 'C:\\Users\\sotir\\Desktop\\machinedataset'
filenames = os.listdir(path)
for filename in sorted(filenames):
if filename.startswith("mpd.slice") and filename.endswith(".json"):
fullpath = os.sep.join((path, filename))
f = open(fullpath)
js = json.load(f)
f.close()
df= pd.json_normalize(js['playlists'], meta=['name', 'collaborative', 'pid', 'modified_at','num_tracks', 'num_albums',
'num_followers', 'num_edits', 'duration_ms', 'num_artists'],record_path= ['tracks'],
record_prefix='_')
这是一个json文件的一部分:
{
"info": {
"generated_on": "2017-12-03 08:41:42.057563",
"slice": "0-999",
"version": "v1"
},
"playlists": [
{
"name": "Throwbacks",
"collaborative": "false",
"pid": 0,
"modified_at": 1493424000,
"num_tracks": 52,
"num_albums": 47,
"num_followers": 1,
"tracks": [
{
"pos": 0,
"artist_name": "Missy Elliott",
"track_uri": "spotify:track:0UaMYEvWZi0ZqiDOoHU3YI",
"artist_uri": "spotify:artist:2wIVse2owClT7go1WT98tk",
"track_name": "Lose Control (feat. Ciara & Fat Man Scoop)",
"album_uri": "spotify:album:6vV5UrXcfyQD1wu4Qo2I9K",
"duration_ms": 226863,
"album_name": "The Cookbook"
},
{
"pos": 1,
"artist_name": "Britney Spears",
"track_uri": "spotify:track:6I9VzXrHxO9rA9A5euc8Ak",
"artist_uri": "spotify:artist:26dSoYclwsYLMAKD3tpOr4",
"track_name": "Toxic",
"album_uri": "spotify:album:0z7pVBGOD7HCIB7S8eLkLI",
"duration_ms": 198800,
"album_name": "In The Zone"
},
],
"num_edits": 6,
"duration_ms": 11532414,
"num_artists": 37
},
【问题讨论】:
-
代码的结构方式,
df=pd.normalize(...)行仅在文件名循环完全完成后运行。这意味着js将只包含循环中最后一个文件的内容。看来您必须事先创建df,然后使用每个js更新它。 -
所有这些Json文件的结构都一样吗?
-
是的,结构是一样的
标签: python json pandas dataframe