簡體   English   中英

在python中循環創建新數據框

[英]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

我勸你

  1. 在內置變量之后命名變量,例如,不要將list用作變量名。
  2. 由於安全性缺陷,請使用exec
  3. 忘記縮進任何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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM