2015-10-19 85 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] 
相關問題