Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧列表解包为单独的表格数据帧_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 将数据帧列表解包为单独的表格数据帧

Python 将数据帧列表解包为单独的表格数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我试图通过一个函数将df元组列表转换为独立数据帧的len数。我发现了一个由不同动物类型组成的简单样本数据框架。我不想创建一个元组格式的数据帧列表,而是希望将它们推到单独的数据帧表(不是元组等)中,而不需要逐个调用df的位置(即animals[0]),因为我不知道任何给定列表的长度。有什么建议吗 import pandas as pd df = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(), 'size': list

我试图通过一个函数将df元组列表转换为独立数据帧的len数。我发现了一个由不同动物类型组成的简单样本数据框架。我不想创建一个元组格式的数据帧列表,而是希望将它们推到单独的数据帧表(不是元组等)中,而不需要逐个调用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
然后,我通过
“动物”
,将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
然后,我尝试提取动物列表中的第一项,结果发现列表中的第一项是元组而不是数据帧:

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)

有没有办法推出猫、狗和鱼的单独数据帧表,而不逐个调用它们?在我的实际应用程序中,我无法预测从数据帧元组列表生成的表的数量。

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

animals = dict(tuple(df.groupby('animal')))
然后只需通过分组键访问元素:

print(animals['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
只用

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

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


Name将是组的名称,即dog、cat等,而group将是数据帧。

非常有效且简单的方法。很好的答案@yatuThis是一种优雅的方式,它可以帮助后代理解+1添加
df[['cat'in x for x in df['animal']]
代替
cat
你可以选择
dog
等等。@pygo OP说“我无法预测表的数量”@yatu的解决方案是实现这一点的一种优雅方式,但只是为了防止您正在寻找
df['cat'in x for x in df['animal']]
df[df['animal'].str.contains('cat',regex=True)]
animals = {}
for name, group in df.groupby('animal'):
    animals[name] = group
print(animals['cat'])
animals = {name: group for name, group in df.groupby('animal')}
df.groupby('animal').get_group('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