Pandas 和 JSON ValueError:数组的长度必须相同

Posted

技术标签:

【中文标题】Pandas 和 JSON ValueError:数组的长度必须相同【英文标题】:Pandas and JSON ValueError: arrays must all be same length 【发布时间】:2021-12-07 10:29:37 【问题描述】:

我正在尝试制作一个简单的应用程序,该应用程序将从歌曲中获取歌词并保存它们,我正在使用 lyricsgenius 来创建一个包含我请求的歌曲歌词的 JSON 文件,但是,我可以不知道如何解析 JSON 文件中的数据。我已尝试遵循 this 教程,但在开始使用 Pandas 时出现错误。

创建 JSON 文件的代码

import lyricsgenius as genius
import os

os.getcwd()

geniusCreds = "qlDFcHWqCRpSfq0pVTctt1ZhDc4wHF6lpP5WGODh4iVQB7yTPn7Hw6SjWAFiCdxa"
artist_name = "Steely Dan"

api = genius.Genius(geniusCreds)
artist = api.search_artist(artist_name, max_songs=3)

artist.save_lyrics()

从 JSON 文件中读取数据的代码

import pandas as pd
import os


Artist = pd.read_json("Lyrics_SteelyDan.json")

df = pd.DataFrame.from_dict(Artist['songs'])

df.head

每当我运行上面的代码时,我都会收到错误,任何有关如何修复错误或解析数据的更好方法的帮助将不胜感激,谢谢。

 "c:/Users/Admin/Desktop/Steely Dan/Data.py"
Traceback (most recent call last):
  File "c:/Users/Admin/Desktop/Steely Dan/Data.py", line 5, in <module>
    Artist = pd.read_json("Lyrics_SteelyDan.json")
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\io\json\_json.py", line 592, in read_json
    result = json_reader.read()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\io\json\_json.py", line 717, in read
    obj = self._get_object_parser(self.data)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\io\json\_json.py", line 739, in _get_object_parser
    obj = FrameParser(json, **kwargs).parse()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\io\json\_json.py", line 849, in parse
    self._parse_no_numpy()
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\io\json\_json.py", line 1093, in _parse_no_numpy
    loads(json, precise_float=self.precise_float), dtype=None
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\frame.py", line 411, in __init__
    mgr = init_dict(data, index, columns, dtype=dtype)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\internals\construction.py", line 257, in init_dict
    return arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\internals\construction.py", line 77, in arrays_to_mgr
    index = extract_index(arrays)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\internals\construction.py", line 368, in extract_index
    raise ValueError("arrays must all be same length")
ValueError: arrays must all be same length

【问题讨论】:

请粘贴完整的回溯。 你也可以发布json吗? 如果你有一个 github,你可以把它发布到那里并链接到它或提供一个 json 文件的示例/部分。 对不起,那个 repo (JSON-Snip) 返回一个 404 相同的 404;是公开回购吗? 【参考方案1】:

如果行有不同的长度,因此您的原始代码将失败。

试试这个:

import json
from pandas.io.json import json_normalize

with open('Lyrics_SteelyDan.json') as json_data:
    data = json.load(json_data)

df = pd.DataFrame(data['songs'])
df['lyrics']

另请阅读:https://hackersandslackers.com/json-into-pandas-dataframes/

【讨论】:

df = json_normalize(data)改成df = pd.DataFrame(data['songs'])然后调用歌词栏df['lyrics'] json_normalize() 已弃用...

以上是关于Pandas 和 JSON ValueError:数组的长度必须相同的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ```pandas.read_json(...)` 期间修复 ```ValueError: Trailing data```?

使用 pandas.read_json 时出现 ValueError

pandas read_json时ValueError: Expected object or value的解决方案

pandas read_json时ValueError: Expected object or value的解决方案

将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确

无法将字符串转换为 pandas 中的浮点数(ValueError)