Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pivot_table()到df无需聚合的数值类型_Python_Pandas_Dataframe_Pivot Table - Fatal编程技术网

Python pivot_table()到df无需聚合的数值类型

Python pivot_table()到df无需聚合的数值类型,python,pandas,dataframe,pivot-table,Python,Pandas,Dataframe,Pivot Table,我有一个df,我正在尝试去规范化。基本上,我想更改参数值,例如,'inst-cap-c','cap-lo-c',等等。。。分成几列 为了做到这一点,到目前为止,熊猫库中有两种方法。在这两种情况下,我都遇到了一些问题,无法将此df反规范化 df如下所示(为了简单起见…): 当我尝试通过以下方式创建具有参数值的列时: data.pivot_table(values='value', index=['Site', 'Storage', 'Commodity'],

我有一个df,我正在尝试去规范化。基本上,我想更改参数值,例如,
'inst-cap-c'
'cap-lo-c'
,等等。。。分成几列

为了做到这一点,到目前为止,熊猫库中有两种方法。在这两种情况下,我都遇到了一些问题,无法将此df反规范化

df如下所示(为了简单起见…):

当我尝试通过以下方式创建具有参数值的列时:

data.pivot_table(values='value',
                 index=['Site', 'Storage', 'Commodity'],
                 columns='parameter')
它只是说:
***pandas.core.base.DataError:没有要聚合的数字类型

我猜这是因为
None
ep比率的值
,我不能使用
NaN
而不是
None
,因为它产生了其他问题

那么,我如何去规范化这个数据帧呢

预期结果:

data       
   Site    Storage  Commodity  inst-cap-c  cap-lo-c cap-up-c ... ep-ratio
0  Mid     Pump     Elec                0         0  1.5e+15 ...     None
1  North   Pump     Elec                0         0  1.5e+15 ...     None
2  South   Pump     Elec                0         0  1.5e+15 ...     None

额外:

data.set_index(['Site', 'Storage','Commodity'], append=True).unstack('parameter')
*** KeyError: 'Level parameter not found'

我还检查了这一点:它没有帮助

您已关闭,需要
参数
列添加到列表,选择列
之前和最后一次使用用于数据清理:

df = (data.set_index(['Site', 'Storage','Commodity','parameter'])['value']
          .unstack()
          .reset_index()
          .rename_axis(None, axis=1))
print (df)
    Site Storage Commodity cap-lo-c cap-lo-p cap-up-c depreciation discharge  \
0    Mid    Pump      Elec        0        0  1.5e+15          NaN       NaN   
1  South    Pump      Elec      NaN      NaN      NaN           50   3.5e-06   

  ep-ratio init inst-cap-c inst-cap-p  wacc  
0      NaN  NaN          0          0   NaN  
1     None    1        NaN        NaN  0.07  

“我不能使用NaN而不是None,因为它会产生其他问题。”您应该更喜欢使用NaN,您可能会在pivot之后使用None替换NaN,但强烈地说,您应该更喜欢简单地使用NaN。@pivot_table()存在问题:因此,它允许您选择是否要通过dropna=True删除值,这是默认设置的。问题是我必须删除一些数据,其中一些数据就像上面的一样,我不应该删除。。。这是因为我的数据结构。因此,我不能用一个一致的方法来结束,我可以使用我的模型数据的每一个案例。这就是我以前将NaN值更改为None的原因。现在我无法执行非规范化。。。寻找更好的建议。。。
df = (data.set_index(['Site', 'Storage','Commodity','parameter'])['value']
          .unstack()
          .reset_index()
          .rename_axis(None, axis=1))
print (df)
    Site Storage Commodity cap-lo-c cap-lo-p cap-up-c depreciation discharge  \
0    Mid    Pump      Elec        0        0  1.5e+15          NaN       NaN   
1  South    Pump      Elec      NaN      NaN      NaN           50   3.5e-06   

  ep-ratio init inst-cap-c inst-cap-p  wacc  
0      NaN  NaN          0          0   NaN  
1     None    1        NaN        NaN  0.07