在python中创建循环中的新数据帧
我一直在从事一个项目,我陷入了这样一种情况:我需要从一个字符串列表中创建多个数据帧,方法是从另一个数据帧中筛选字符串列表的值,该数据帧的列包含列表中相同的值。我正在编写以下代码:在python中创建循环中的新数据帧,python,pandas,for-loop,dataframe,Python,Pandas,For Loop,Dataframe,我一直在从事一个项目,我陷入了这样一种情况:我需要从一个字符串列表中创建多个数据帧,方法是从另一个数据帧中筛选字符串列表的值,该数据帧的列包含列表中相同的值。我正在编写以下代码: df = pd.DataFrame({'A': range(1, 5), 'B': np.random.randn(4), 'C':['A',A','B','C']} list = df.C.unique() list = list.tolist() for r in list: exec('df_{}=df[df.C
df = pd.DataFrame({'A': range(1, 5), 'B': np.random.randn(4), 'C':['A',A','B','C']}
list = df.C.unique()
list = list.tolist()
for r in list:
exec('df_{}=df[df.C=={}]'.format(r))
这引发了一个错误,称为“元组索引超出范围”。有人能帮我一下吗?我建议使用
dict
,因为它比exec
更安全:
uniqueC = df.C.unique()
dfs = {'df_{}'.format(r): df[df.C==r] for r in uniqueC}
现在,当您需要某个数据帧时,只需调用:
dfs['df_A']
# A B C
#0 1 1.755507 A
#1 2 -0.371027 A
使用字典查找可变数量的变量。您可以在词典理解中使用
groupby
:
dfs = {k: v for k, v in df.groupby('C')}
print(dfs['B'])
A B C
2 3 -0.785257 B
我建议你不要这样做:
list
用作变量名exec
。缩进在Python中很重要
tuple
s,然后再转换为dict
s:
d = dict(tuple(df.groupby('C')))
我的最佳猜测是您打算编写
.format(r,r)
,但这仍然会引发错误。您必须更详细地了解代码的预期输出。@lit-答案已更改。非常感谢。对我有用。谢谢你的提示!:)
d = dict(tuple(df.groupby('C')))
print (d['A'])
A B C
0 1 0.670449 A
1 2 -1.265135 A
print (d['B'])
A B C
2 3 -0.35891 B
print (d['C'])
A B C
3 4 0.651704 C