ValueError: установка элемента массива с последовательностью. для панд

У меня есть Pandas dataframe по имени output. Основная проблема заключается в том, что я хотел бы установить определенную строку, столбец в dataframe в список, используя функцию ix, и я получаю ValueError: setting an array element with a sequence. Насколько я понимаю, элемент dataframe был похож на элемент списка, он может содержать что угодно (строка, список , кортеж и т. д.). Я не прав?

Базовая настройка:

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.

person user2242044    schedule 19.10.2015    source источник
comment
Почему вы хотите составить список?   -  person Anand S Kumar    schedule 19.10.2015
comment
@АнандСКумар. Это простой пример, иногда может быть несколько значений, поэтому список имеет смысл, т.е. [400.0, 200.0]   -  person user2242044    schedule 19.10.2015


Ответы (1)


Если вы действительно хотите установить список в качестве значения для элемента, проблема связана с 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 при создании DataFrame, пример -

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]
person Anand S Kumar    schedule 19.10.2015
comment
output['Sold Count'].astype(object).apply(list) по-прежнему не работает - person vinayak_narune; 09.02.2020