【问题标题】:Problem reading multiple json files and make dataframe读取多个 json 文件并制作数据框时出现问题
【发布时间】: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


【解决方案1】:

在你的 for 循环中,你需要将加载的数据附加到一个列表中,然后开始从加载的数据构建你的数据框。

data = [] # Here is your list
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)
        data.append(json.load(f)) # here data keeps the loaded json
        f.close()

之后,您可以使用数据列表来构建您的数据框架

【讨论】:

  • 感谢您的回复,我更新了代码,但出现错误。我添加了代码作为答案。
猜你喜欢
  • 1970-01-01
  • 2019-03-26
  • 2016-05-08
  • 2017-11-11
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
相关资源
最近更新 更多