将熊猫数据框列表解压缩为单独的表格数据框

时间:2019-09-02 14:48:33

标签: python python-3.x pandas dataframe

我正在尝试通过函数将df元组的熊猫列表转换为len个独立的DataFrame。我发现了一个简单的示例DataFrame,它由不同的动物类型组成。我不想以元组格式创建DataFrames列表,而是希望将它们推出到单独的DataFrames表(而不是元组等)中,而不用一一调用df的位置(即animals[0]),因为我不知道任何给定列表将持续多长时间。有什么建议吗?

import pandas as pd

df = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(),
'size': list('SSMMMLL'),
'weight': [8, 10, 11, 1, 20, 12, 12],
'adult': [False] * 5 + [True] * 2})

我检查了df:

df

    animal  size    weight  adult
0   cat S   8   False
1   dog S   10  False
2   cat M   11  False
3   fish    M   1   False
4   dog M   20  False
5   cat L   12  True
6   cat L   12  True

然后我通过按'animal'分组将df分为三个较小的df:

animals = list(df.groupby('animal'))

for a in animals:
  print(a, end='\n\n')

('cat',   animal size  weight  adult
0    cat    S       8  False
2    cat    M      11  False
5    cat    L      12   True
6    cat    L      12   True)

('dog',   animal size  weight  adult
1    dog    S      10  False
4    dog    M      20  False)

('fish',   animal size  weight  adult
3   fish    M       1  False)

接下来,我确认动物是否确实是列表:

type(animals)
list

然后我尝试提取动物列表中的第一项,只是发现列表的第一项是元组而不是DataFrame:

animals[0]

('cat',   animal size  weight  adult
 0    cat    S       8  False
 2    cat    M      11  False
 5    cat    L      12   True
 6    cat    L      12   True)
type(animals[0])
tuple

有没有办法为猫,狗和鱼推出单独的DataFrame表,而不用一个一个地调用它们?在我的实际应用程序中,我无法预期将从DataFrame元组列表中生成的表的数量。

2 个答案:

答案 0 :(得分:3)

每个元素都是一个.remove key/value,每个键都是由于tuple而产生的分组键。而是从GroupBy对象构建一个tuple,并使用它来构建字典:

groupby

然后通过分组键访问元素:

animals = dict(tuple(df.groupby('animal')))

答案 1 :(得分:2)

只需使用

<form [formGroup]="myForm">
    Name: <input type="text" formControlName="myName">
    <div tabindex="-1" (focusout)="genderFocused = false">
        Gender: <input type="text" formControlName="myGender" (focus)="genderFocused = true">
        <label>Yes<input type="radio"></label>
        <label>No<input type="radio"></label>
    </div>
</form>

OR

animals = {}
for name, group in df.groupby('animal'):
    animals[name] = group
print(animals['cat'])

或者如果您想访问特定的组(我认为这是最好的)

animals = {name: group for name, group in df.groupby('animal')}

名称将是组的名称,即狗,猫等,而组将是数据框。