You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取多份JSON文件合并为DataFrame时报错如何修改代码?

问题原因与修改方案

报错原因

你触发报错的核心问题是使用了==判断DataFrame对象是否为None:
当df1已经被赋值为DataFrame类型后,df1 == None操作会对DataFrame的每一个元素和None做等值比对,返回的是布尔型的DataFrame结构,Pandas不允许直接将整个DataFrame放在if条件中做布尔判断,因此抛出了The truth value of a DataFrame is ambiguous的错误。

必须修改的代码

将第18行的判断条件:

if df1==None:

替换为:

if df1 is None:

is是Python的身份运算符,直接判断变量指向的内存对象是否为None,不会触发DataFrame的元素级比对,即可解决报错。

可选优化方案(推荐)

你当前循环中每次调用pd.concat都会生成新的DataFrame,文件数量多的时候效率较低,可以调整为先收集所有子DataFrame最后再合并,同时用with上下文管理器管理文件打开操作,避免资源泄漏:

import json
import pandas as pd
import os

path = 'C:\\Users\\sotir\\Desktop\\machinedataset'
filenames = os.listdir(path)
df_list = []

for filename in sorted(filenames):
    if filename.startswith("mpd.slice") and filename.endswith(".json"):
        fullpath = os.path.join(path, filename)
        with open(fullpath, 'r', encoding='utf-8') as f:
            js = json.load(f)
        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='_'
        )
        df_list.append(df)

# 所有文件读取完成后统一合并
df_total = pd.concat(df_list, ignore_index=True)

补充:你之前出现只保留最后一个文件数据的问题,大概率是之前的代码没有写累加拼接的逻辑,每次循环直接将新的df赋值给了总变量,修改为上述逻辑后即可正常合并所有文件数据。


内容的提问来源于stack exchange,提问作者manduk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:27:06