pandas :DataFrame中的DataFrame [英] Pandas: DataFrame within DataFrame

查看:61
本文介绍了 pandas :DataFrame中的DataFrame的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建一个包含DataFrames列的DataFrame.列中的DataFrames具有不同的大小,并且出现了StopIteration异常.当DataFrames的大小相同时,不会发生这种情况.我知道Panel更适合此情况,但是在这种情况下,我需要DataFrame.

I need to create a DataFrame that contains columns of DataFrames. The DataFrames that go in the column have different sizes and I am getting a StopIteration exception. This doesn't happen, when the DataFrames are of the same size. I know a Panel is more suitable for this, but I need a DataFrame in this case.

a=pd.DataFrame({'cat1':['one','two','three'],'cat2':['four','five','six']})
b=pd.DataFrame({'cat1':['ten','eleven'],'cat2':['twelve','thirteen']})
pd.DataFrame({'col1':{'row1':a,'row2':b}})

如果我分别从"cat1","cat2"中删除三个"和六个"项目,则此方法工作正常.知道我该如何实现吗?

If I remove the 'three' and 'six' items from 'cat1', 'cat2' respectively, then this works fine. Any idea how I can achieve this?

推荐答案

这不是一个好主意,您会失去所有效率,因为事情被视为object dtype且操作将非常缓慢(因为操作无法通过c级基本类型,例如float/int).更好的方法是使用多级索引,该索引可以轻松包含我认为想要的内容

this is not a good idea, you lose all efficiency because things are treated as object dtype and operations will be quite slow (as operations cannot be done via c-level base types, like float/int). Better is to use a multi-level index, which can easily encompass what I think you want

In [20]: a
Out[20]: 
    cat1  cat2
0    one  four
1    two  five
2  three   six

In [21]: b
Out[21]: 
     cat1      cat2
0     ten    twelve
1  eleven  thirteen

In [22]: pd.concat([ a, b ], keys={ 'row1' : a, 'row2' : b })
Out[22]: 
          cat1      cat2
row1 0     one      four
     1     two      five
     2   three       six
row2 0     ten    twelve
     1  eleven  thirteen

这篇关于 pandas :DataFrame中的DataFrame的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆