【问题标题】:Using concat for a dictionary I get the error: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"使用 concat 作为字典我得到错误:第一个参数必须是 pandas 对象的可迭代对象,您传递了一个“DataFrame”类型的对象
【发布时间】:2019-10-23 11:10:50
【问题描述】:

我有一个带有数据框的字典,看起来像这样:

dataframes = {'Df_20100101': DataFrame, 'Df_20100102': DataFrame, 'Df_20100103': DataFrame}

所有数据框都具有相同的变量(价格、交易量和日期)和相同的索引。我想将所有不同的数据帧放入 1 个数据帧中。我使用以下代码:

df = pd.concat([pd.concat(v,ignore_index=True) for k,v in dataframes.items()])

但是,我收到一个错误:the first argument must be iterable of pandas objects, you passed an object of type "DataFrame"

是不是因为所有变量都有相同的Index?

谁能帮帮我?

谢谢!

【问题讨论】:

  • df = pd.concat([v for _,v in dataframes.items()], ignore_index=True)?我不知道你为什么打电话给concat 两次
  • 您能否在提供建议时更具建设性?为什么你说它没有任何意义?我们是来帮忙的。是的,它是一个字典,具有不同的数据框,具有相同的变量但不同的观察结果。
  • 因为'Df_20100101': DataFrame 等上突出显示的语法表明您将通用 df 构造函数存储在字典中,但这并不是您实际在做的事情。这是它呈现给我的方式和我自己的阅读的结合。
  • 好的,这就是问题所在。非常感谢您的帮助。
  • 别担心,对于沟通不畅表示歉意 :) 是否完全解决了您的问题?

标签: python pandas dictionary concat


【解决方案1】:

您在字典中的各个数据帧上调用 pd.concat(您有嵌套的 pd.concat() 调用)。相反,您只需要一个列表解析来将数据帧收集到一个列表中并在此调用 .concat()

df = pd.concat([v for _, v in dataframes.items()], ignore_index=True)

for k, v 也完全有效,但习惯上将_ 用于您要丢弃的值,并且您不要在此处使用密钥。

你也可以只使用.values():

df = pd.concat(dataframes.values(), ignore_index=True)

【讨论】:

    猜你喜欢
    • 2022-08-24
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多