将pandas DataFrame转换为numpy数组,但不一致



我遇到了一个奇怪的不一致。因此,我必须了解不可变和可变数据类型之间的区别。出于我的目的,我需要将我的pandas DataFrame转换为Numpy应用操作并将其转换回,因为我不希望更改我的输入。

所以我转换如下:

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,0,-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_molfracmix_to_pmix的输入。但是pandas对象有一个.value属性,它允许您访问底层的numpy数组。因此,最好使用mix_in = mix.values

columns, values = df.columns, df.values

最新更新