python 如何从JSON文件制作数据框?(使用从Facebook下载的JSON文件)

ifmq2ha2  于 2023-03-28  发布在  Python
关注(0)|答案(2)|浏览(140)

我对Python非常陌生,目前正在进行一个个人项目,使用从Facebook下载的JSON文件,所有这些文件都来自Messenger上的一次聊天。尽管我定义了df,但我一直收到一个错误,说df没有定义。
我有多个JSON文件,我试图读取到一个dataframe中。我创建了一个循环,这样我就可以做到这一点,我在循环中定义了df。当我调用df查看它时,它说它没有定义。我的代码如下:
import pandas as pd import json,glob,os import numpy as np
file_path =“work/Desktop/fb data/jsonmssg/message_1.json”
file_dir =“work/Desktop/fb data/jsonmssg”
json_pattern = os.path.join(file_dir,'*. json')
file_list = glob.glob(json_pattern)
定义域= []
对于文件列表中的f:open(file)as file:chat_history = json.loads(file.read())

json_data = pd.json_normalize(chat_history['messages'])
    
    dfs.append(json_data)
    
    df = pd.concat(dfs)

df

NameError Traceback(most recent call last)in ----〉1 df
名称错误:未定义名称“df”
有谁知道我该怎么做吗?
我试着创建一个循环来遍历同一目录中的所有JSON文件,希望它能将它们连接到一个 Dataframe 中,但没有成功。

h7appiyu

h7appiyu1#

首先,当试图获取不同目录中的文件的路径名列表时,包括目录中的目录,你应该使用recursive标志。

glob.glob('mypath/**/*.json', recursive=True)

其次,由于您定义路径的方式,您放入glob.glob()的路径名本身可能无效。这是因为不同的操作系统具有不同的路径名约定,这可能会影响os.path.join()。例如,在我的操作系统上,os.path.join('work/Desktop/fb data/jsonmssg', '*.json')导致'work/Desktop/fb data/jsonmssg\\*.json'。请注意不兼容的'/''\\'
您可以中继os.path.join()来为您的操作系统构建正确的路径名

os.path.join('work', 'Desktop', 'fb data', 'jsonmssg', '*.json')

在继续之前,请确保使用os.path.exists(json_pattern)检查路径是否正确。

ttisahbt

ttisahbt2#

首先,我不确定glob是否是你最好的选择。至少,这不是我会做的......你只需要glob到“**”目录。
不如这样:

import os
import fnmatch
import json
import pandas as pd

file_dir = "work/Desktop/fb data/jsonmssg"

json_file_list = [direntry.name for direntry in os.scandir("file_dir") if direntry.stat().size >0 and fnmatch.fnmatch(direntry.name, "*.json")]
for json_filename in json_file_list:
  deserialized = json.load(json_filename)
  if deserialized: // Will be null if json is invalid, I think
    df = pd.read_json(json_filename)
    df.to_string() // Just to prove it worked :)

希望这能帮助你简化生活:)

相关问题