2015-10-19 61 views
2

我有一个Pandasdataframe,叫做output。基本问题是,我想将dataframe中的某一行,列设置为使用ix函数的列表,并得到ValueError: setting an array element with a sequence.我的理解是,dataframe元素就像列表元素,它可以容纳任何东西(字符串,列表,元组等)。我不正确吗?ValueError:使用序列设置数组元素。对于熊猫

基本设置:

import pandas as pd 
output = pd.DataFrame(data = [[800.0]], columns=['Sold Count'], index=['Project1']) 
print output.ix['Project1', 'Sold Count'] 
>>>800 

工作正常

output.ix['Project1', 'Sold Count'] = 400.0 
print output.ix['Project1', 'Sold Count'] 
>>>400.0  

不起作用

output.ix['Project1', 'Sold Count'] = [400.0] 
print output.ix['Project1', 'Sold Count'] 
>>>ValueError: setting an array element with a sequence. 
+0

你为什么要设置一个列表? –

+0

@AnandSKumar。这是一个简单的例子,有时候会有多个值,所以列表有意义,即'[400.0,200.0]' – user2242044

回答

2

如果你真的想设置一个列表,该元素的值时,问题在于列的dtype,当您创建DataFrame时,dtype被推断为float64,因为它只包含数字值。

然后当您尝试设置一个列表作为值时,由于dtype,它出错。解决这个问题的一种方法是使用非数字dtype(如object)左右。示例 -

output['Sold Count'] = output['Sold Count'].astype(object) 
output.loc['Project1','Sold Count'] = [1000.0,800.0] #Your list 

演示 -

In [91]: output = pd.DataFrame(data = [[800.0]], columns=['Sold Count'], index=['Project1']) 

In [92]: output 
Out[92]: 
      Sold Count 
Project1   800 

In [93]: output['Sold Count'] = output['Sold Count'].astype(object) 

In [94]: output.loc['Project1','Sold Count'] = [1000.0,800.0] 

In [95]: output 
Out[95]: 
       Sold Count 
Project1 [1000.0, 800.0] 

您还可以指定dtype在创建数据帧,例如 -

output = pd.DataFrame(data = [[800.0]], columns=['Sold Count'], index=['Project1'],dtype=object) 
output.loc['Project1','Sold Count'] = [1000.0,800.0] 

演示 -

In [96]: output = pd.DataFrame(data = [[800.0]], columns=['Sold Count'], index=['Project1'],dtype=object) 

In [97]: output.loc['Project1','Sold Count'] = [1000.0,800.0] 

In [98]: output 
Out[98]: 
       Sold Count 
Project1 [1000.0, 800.0] 
相关问题