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