[英]Creating new dataframes in loop in python
我一直在從事一個項目,但是我陷入了一種情況,我需要通過過濾另一個字符串中包含相同列表值的數據框的字符串列表值來從字符串列表中創建多個數據框。 我正在編寫如下代碼:
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
。 for
循環。 縮進在Python中很重要。 您可以將groupby
對象轉換為tuple
,然后轉換為dict
:
d = dict(tuple(df.groupby('C')))
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.