'错误:无法分配到功能调用'在python中使用eval()函数

时间:2017-11-22 07:43:12

标签: python-3.x pandas loops dataframe

我正在尝试运行2个嵌套循环,将数据从1个巨大的数据帧(比如数据)分成12个独立的数据帧。 '数据'有列(leaf1,leaf2,leaf3,leaf4,..,leaf12)。我创建了12个不同的数据帧,名称为leaf1,leaf2,leaf3 ...,leaf12。我正在检查主要数据帧的每一行。如果该行不是“NaN'”,那么我将使用以下代码将其附加到新创建的数据框之一中:

leaf1 = pd.DataFrame()
leaf2 = pd.DataFrame()
.
.
.
leaf12 = pd.DataFrame()

list1 = ['leaf1', 'leaf2',...,'leaf12']
for i in list1:
    temp1 = data[[i]]
    if temp1.isnull().any().any() == False:
        eval(i) = eval(i).append(temp1)

在最后一行中,我需要将字符串转换为变量,然后将数据帧附加到该变量中。但是,我收到了一个错误。请帮忙。

1 个答案:

答案 0 :(得分:0)

我认为更好的是将其转换为If IsNull(a) Then MsgBox "a is null" Else '...

dictionary of DataFrames

与:

相同
np.random.seed(1997)
df = pd.DataFrame(np.random.choice([np.nan,1,5], size=(10,12)))
df.columns = ['leaf{}'.format(x+1) for x in df.columns]
print (df)
   leaf1  leaf2  leaf3  leaf4  leaf5  leaf6  leaf7  leaf8  leaf9  leaf10  \
0    1.0    1.0    NaN    NaN    5.0    5.0    5.0    5.0    1.0     NaN   
1    1.0    5.0    NaN    1.0    1.0    NaN    1.0    NaN    5.0     1.0   
2    1.0    5.0    5.0    1.0    NaN    1.0    1.0    NaN    5.0     NaN   
3    1.0    5.0    NaN    1.0    1.0    5.0    5.0    1.0    1.0     1.0   
4    NaN    5.0    5.0    5.0    NaN    1.0    1.0    1.0    1.0     1.0   
5    NaN    NaN    NaN    1.0    NaN    5.0    5.0    1.0    1.0     1.0   
6    5.0    1.0    1.0    1.0    NaN    1.0    1.0    5.0    5.0     1.0   
7    5.0    1.0    5.0    NaN    NaN    5.0    NaN    1.0    1.0     5.0   
8    5.0    5.0    1.0    NaN    1.0    1.0    5.0    1.0    5.0     1.0   
9    5.0    1.0    5.0    NaN    5.0    NaN    NaN    5.0    1.0     NaN   

   leaf11  leaf12  
0     NaN     1.0  
1     NaN     5.0  
2     1.0     5.0  
3     1.0     1.0  
4     NaN     NaN  
5     5.0     1.0  
6     5.0     NaN  
7     NaN     1.0  
8     NaN     1.0  
9     NaN     5.0  


dfs = {c:df[[c]] if df[c].notnull().all() 
                 else pd.DataFrame(columns=[c]) for c in df.columns }

然后按dfs = {} for c in df.columns: if df[c].notnull().all(): dfs[c] = df[[c]] else: dfs[c] = pd.DataFrame(columns=[c]) s选择,此处为列名:

key