如何一次为多个变量分配相同的值或nan?

时间:2018-11-25 15:28:23

标签: python-3.x pandas

我试图将相同的值分配给许多变量。在这种情况下,值是nan。我的代码如下:

Pmpp_inIV=np.nan
ff=np.nan
Voc_inIV=np.nan
Voc_error=np.nan
i_at_voc=np.nan
Isc_inIV=np.nan
Isc_error=np.nan
v_at_Isc=np.nan
print(type(Pmpp_inIV))
print(Pmpp_inIV,ff,Voc_inIV,Voc_error,i_at_voc,Isc_inIV,Isc_error,v_at_Isc)

输出为:

<class 'float'>
nan nan nan nan nan nan nan nan

我想知道比这更好的方法。我的意思是,与其多次键入许多np.nan作为变量,还不如有一种更好的方法来仅将其写入一次?

2 个答案:

答案 0 :(得分:1)

我认为您需要dictionary

vals = ['Pmpp_inIV','ff','Voc_inIV','Voc_error','i_at_voc','Isc_inIV','Isc_error','v_at_Isc']

d = dict.fromkeys(vals, np.nan)
print (d)

{'Pmpp_inIV': nan, 'ff': nan, 'Voc_inIV': nan, 'Voc_error': nan, 
 'i_at_voc': nan, 'Isc_inIV': nan, 'Isc_error': nan, 'v_at_Isc': nan}

并通过键选择值:

print (d['Pmpp_inIV'])
nan

但是如果需要使用DataFrame中指定的列创建vals

df = pd.DataFrame(10, columns=vals, index=np.arange(10))
print (df)
   Pmpp_inIV  ff  Voc_inIV  Voc_error  i_at_voc  Isc_inIV  Isc_error  v_at_Isc
0         10  10        10         10        10        10         10        10
1         10  10        10         10        10        10         10        10
2         10  10        10         10        10        10         10        10
3         10  10        10         10        10        10         10        10
4         10  10        10         10        10        10         10        10
5         10  10        10         10        10        10         10        10
6         10  10        10         10        10        10         10        10
7         10  10        10         10        10        10         10        10
8         10  10        10         10        10        10         10        10
9         10  10        10         10        10        10         10        10

答案 1 :(得分:0)

老实说,听起来很奇怪,必须为NaN设置一堆变量,大概只是稍后进行突变。我敢打赌,有一种更好的方法来完成您要完成的任务。

也就是说,您也可以使用repeat中的itertools

from itertools import repeat

Pmpp_inIV, ff, Voc_inIV, Voc_error, \
    i_at_voc, Isc_inIV, Isc_error, v_at_Isc \
        = repeat(np.nan, 8)

或者您可以使用locals()

动态设置它们
for k in ['Pmpp_inIV', 'ff', 'Voc_inIV', 'Voc_error',
          'i_at_voc', 'Isc_inIV', 'Isc_error', 'v_at_Isc']:
    locals()[k] = np.nan

这两种解决方案都不适合维护,因此我建议完全考虑使用另一种方法。