Создайте фрейм данных, где столбец представляет собой список кортежей

Я пытаюсь создать список кортежей в фрейме данных. Используя код ниже:

# creating the Numpy array
array = np.array([[('A' , 1)], [('B' , 2)]])
  
# creating a list of index names
index_values = ['x1', 'x2']
   
# creating a list of column names
column_values = ['(a,b)']
  
# creating the dataframe
df = pd.DataFrame(data = array, 
                  index = index_values, 
                  columns = column_values)
  
df

возвращает:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/tmp/ipykernel_45/2020978637.py in <module>
     13 df = pd.DataFrame(data = array, 
     14                   index = index_values,
---> 15                   columns = column_values)
     16 
     17 df

/opt/oss/conda3/lib/python3.7/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
    676                     dtype=dtype,
    677                     copy=copy,
--> 678                     typ=manager,
    679                 )
    680 

/opt/oss/conda3/lib/python3.7/site-packages/pandas/core/internals/construction.py in ndarray_to_mgr(values, index, columns, dtype, copy, typ)
    302         # by definition an array here
    303         # the dtypes will be coerced to a single dtype
--> 304         values = _prep_ndarray(values, copy=copy)
    305 
    306     if dtype is not None and not is_dtype_equal(values.dtype, dtype):

/opt/oss/conda3/lib/python3.7/site-packages/pandas/core/internals/construction.py in _prep_ndarray(values, copy)
    553         values = values.reshape((values.shape[0], 1))
    554     elif values.ndim != 2:
--> 555         raise ValueError(f"Must pass 2-d input. shape = {values.shape}")
    556 
    557     return values

ValueError: Must pass 2-d input. shape=(2, 1, 2)

Использование кортежа из одного элемента:

array = np.array([[(1)], [(2)]])

Можете ли вы показать пример ожидаемого результата?

JMA 25.11.2022 17:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, как вы создаете массив numpy, неверно. Поскольку это массив кортежей, вам нужно будет указать dtype элементов кортежа при создании массива, а затем привести его обратно к типу объекта, используя astype(object).

Сделайте следующее -

array = np.array([[('A',1)], [('B',2)]], dtype=('<U10,int')).astype(object)

index_values = ['x1', 'x2']

column_values = ['(a,b)']

df = pd.DataFrame(data = array, index = index_values, columns = column_values)

Выход:

>>> df
     (a,b)
x1  (A, 1)
x2  (B, 2)

Другие вопросы по теме