问题描述
我遇到了一个奇怪的不一致问题。所以我必须了解不可变和可变数据类型之间的区别。出于我的目的,我需要将我的 Pandas DataFrame 转换为 Numpy apply 操作并将其转换回来,因为我不想改变我的输入。
所以我转换如下:
mix=pd.DataFrame(array,columns=columns)
def mix_to_pmix(mix,p_tank):
prevIoUs=0
columns,mix_in=np.array(mix) #<---
mix_in*=p_tank
prevIoUs=0
for count,val in enumerate(mix_in):
mix_in[count]=val+prevIoUs
prevIoUs+=val
return pd.DataFrame(mix_in,columns=columns)
这工作得很好,但功能:
columns,mix_in=np.array(mix)
似乎与案例不一致:
def to_molfrac(mix):
columns,mix_in=np.array(mix)
shape=mix_in.shape
for i in range(shape[0]):
mix_in[i,:]*=1/max(mix_in[i,:])
for k in range(shape[1]-1,-1):
mix_in[:,k]+=-mix_in[:,k-1]
mix_in=mix_in/mix_in.sum(axis=1)[:,np.newaxis]
return pd.DataFrame(mix_in,columns=columns)
我收到错误:
ValueError: too many values to unpack (expected 2)
解决方法
没有例子是不可能理解to_molfrac
和mix_to_pmix
的输入的。
但是 pandas 对象有一个 .value
属性,它允许您访问底层的 numpy 数组。因此,使用 mix_in = mix.values
可能更好。
columns,values = df.columns,df.values