Присвоение кортежа ячейке фрейма данных pandas завершается сбоем в объединенном фрейме данныхPython

Программы на Python
Ответить
Anonymous
 Присвоение кортежа ячейке фрейма данных pandas завершается сбоем в объединенном фрейме данных

Сообщение Anonymous »

У меня есть DataFrame с кортежами в ячейках:
import numpy as np
import pandas as pd

data = np.empty((3, 4), dtype=[('cost', np.int32), ('count', np.int32)])

data['count'] = 0
data['cost'] = [[10, 2, 20, 11],
[12, 7, 9, 20],
[ 2, 14, 16, 18]]

sup = [1, 2, 3]

df = pd.DataFrame(data=data.tolist(), columns=[f'{i+1}' for i in range(len(data[0]))])
df = df.join(pd.DataFrame(sup, columns=['Supplies']))

print(df)

Это дает следующий результат:
1 2 3 4 Supplies
0 (10, 0) (2, 0) (20, 0) (11, 0) 1
1 (12, 0) (7, 0) (9, 0) (20, 0) 2
2 (2, 0) (14, 0) (16, 0) (18, 0) 3

Далее я хочу обновить ячейку:
df.loc[1, '1'] = (1,2)

но я получаю ValueError: при настройке с помощью итерации должны быть одинаковые ключи len и значение
Та же проблема возникает с список. Присвоение любых неитерируемых типов данных, таких как строка или целое число, работает хорошо.
Далее, если я удалю это соединение:
df = df.join(pd.DataFrame(sup, columns=['Supplies']))

Я могу без проблем назначать ячейки кортежами.
Я думаю, это происходит потому, что он пытается обновить ни одну ячейку (но что?)
Между тем, присвоение с помощью df.at работает хорошо, но почему бы не df.loc?
df.at[1, '1'] = (1,2)


Подробнее здесь: https://stackoverflow.com/questions/793 ... -dataframe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»