двумерные массивы как элементы панд - PullRequest
0 голосов
/ 29 июня 2018

Как я могу правильно использовать numy 2d массивы в качестве элементов строк-столбцов панд?

Я попробовал несколько простых примеров, но когда я сохраняю и загружаю базу данных, формат массива изменяется, и я не могу получить доступ к индексам массива (но я могу получить доступ к элементу в целом).

Пример:

import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['array','A','B'])
v = np.zeros((2,2))
df.loc[0,'array'] = v
df.loc[0,'A'] = 'some'
df.loc[0,'B'] = 'other'
df.to_csv('experiment.csv',index=False)

Вещи, которые я пытался прочитать массивом элементов 0:

import pandas as pd
import numpy as np
df = pd.read_csv('experiment.csv')

new_v1 = df.loc[0,'array']
print(new_v1[0,1])

new_v2 = np.array(df.loc[0,'array'])
print(new_v2[0,1])

new_v3 = df.loc[0,'array'].item()
print(new_v3[0,1])

Но он показывает следующие ошибки:

IndexError: too many indices for array
AttributeError: 'str' object has no attribute 'item'

Как я могу использовать пустые массивы для каждого элемента? Возможно ли это?

SOLUTIONS

Как сказал ALollz , мне не нужно быть в удобочитаемом для человека формате, поэтому я использовал формат рассола. Это прямой способ сохранения, загрузки и использования аналогично переменной Python.

Другой вариант - использовать другой разделитель (решение mdk ). Но из того, что я понимаю, вы должны преобразовать массив в строку и обратно из строки, а также изменить форму массива, если это более одного измерения (с использованием reshape).

1 Ответ

0 голосов
/ 29 июня 2018

Ваш оригинальный DataFrame выглядит следующим образом:

                      array     A      B
 0  [[0.0, 0.0], [0.0, 0.0]]  some  other

Массив содержит 3 раза ",", и вы используете df.to_csv('experiment.csv',index=False) со стандартным разделителем "," (см. docs ).

Попробуйте использовать другой разделитель, например, df.to_csv('experiment.csv', sep=';',index=False) и df = pd.read_csv('experiment.csv', sep=';').

Ваш DataFrame теперь выглядит так:

                    array     A      B
0  [[0. 0.]\r\n [0. 0.]]  some  other

После импорта ваш массив уже не массив, а строка. Используйте numpy.fromstring , чтобы преобразовать строку массива обратно в пустой массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...