【问题标题】:for loop in Pandas on returning limited items from list [closed]熊猫中的for循环从列表中返回有限的项目[关闭]
【发布时间】:2021-09-30 21:11:01
【问题描述】:

我正在读取一个 JSON 文件,其中包含来自 API 请求的所有信息。该文件不是很大,只有大约 200 项。我正在尝试遍历每个项目,将其存储为 pandas DataFrame,将其附加到列表中,然后将结果连接到一个 DataFrame 中。

df_list = []
list_length = 53
for i in range(list_length):
  df = pd.DataFrame(contenders_list[i]).T.reset_index()
  df_list.append(df)

new_df = pd.concat(mylist)
new_df.head()

如果我运行它,它会起作用。我有一个 DataFrame,其中包含 JSON 文件中的前 53 个项目。但是,如果我超过 53,就像列表的实际长度一样,我会收到以下错误:

ValueError: If using all scalar values, you must pass in an index

谁能解释一下?

【问题讨论】:

  • 你不能直接把原始列表变成数据框,没有这样的循环吗?
  • contenders_list[53] 一定有什么不同。错误解释见stackoverflow.com/questions/17839973/…
  • 如果这不能解决您的问题,您需要展示contenders_list 的示例元素,这些元素有效且失败。
  • 什么是mylist
  • 在创建数据框之前,print(contenders_list[i])。现在你知道什么失败了。

标签: python pandas data-science


【解决方案1】:

您是否尝试过将 JSON 作为 pandas DataFrame 加载? Pandas 有一个名为read_json 的方法,它会自动将您的 JSON 转换为 pandas DF。看看:

from pandas import read_json

# If the files are in the same folder, then you can simply write 'filename.json'
dataframe_from_json = read_json('path/to/your.json')

【讨论】:

    【解决方案2】:

    您没有使用从字典创建数据框的最佳方法。 Pandas 期望数据值是列表值或字典值。根据提出的错误,您正在传递一个标量值。在这种情况下,您还必须传入索引。

    假设你这样做:

    my_dict = {
      'a':'1',
      'b':'2',
      'c':'3'
    }
    
    # Convert dict to dataframe
    df = pd.DataFrame.from_dict(my_dict)
    df
    

    您确实应该收到以下错误:

    ValueError: If using all scalar values, you must pass an index
    

    但如果你这样做:

    my_dict = {
      'a':['1'],
      'b':['2'],
      'c':['3']
    }
    
    # Convert dict to dataframe
    df = pd.DataFrame.from_dict(my_dict)
    df
    

    它不会引发任何错误并输出如下:

        a   b   c
    0   1   2   3
    

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 1970-01-01
      • 2020-11-21
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 2021-12-17
      相关资源
      最近更新 更多