Преобразование кортежей в строки для функций в обучении машинного обучения - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть DataFrame функций, которые я хочу использовать в алгоритме машинного обучения.Фрейм данных выглядит следующим образом:

содержит фрейм данных Я хочу использовать этот фрейм данных в качестве входных данных для алгоритмов ML, таких как Random Forest или ANN.Но я получаю ошибку ValueError: установка элемента массива с последовательностью.

Я думаю, что это из-за кортежей.Есть ли способ, которым я могу преобразовать все кортежи в строки?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Начиная с df, как у вас:

t1 = (1,2)
t2 = (3,4)
cols = ['A', 'B']
rows = []
for a in range(2):
    rows.append([t1,t2])
df = pd.DataFrame(rows, columns=cols)
df


    A   B
0   (1, 2)  (3, 4)
1   (1, 2)  (3, 4)

Я думаю, что первая проблема - это ваши столбцы, вам нужно в два раза больше.Сбросьте столбцы следующим образом:

df.columns =  [(x+"L", x+'R') for x in df.columns]
df

    (AL, AR) (BL, BR)
0   (1, 2)  (3, 4)
1   (1, 2)  (3, 4)

Теперь вы можете просто закодировать цикл следующим образом:

newRows = []
oneRow = []
for index, row in df.iterrows():
    oneRow = []
    for a in range(len(row)):
        oneRow += list(row[a])
        oneRow = [str(x) for x in oneRow] #<-  this changes everything to strings
    newRows.append(oneRow)
newRows

[['1', '2', '3', '4'], ['1', '2', '3', '4']]

сделать то же самое для столбцов:

newCols = []
for a in range(len(df.columns)):
    newCols += list(df.columns[a])
newCols

['AL', 'AR', 'BL', 'BR']

и затем соедините все это вместе:

dfNew = pd.DataFrame(newRows, columns=newCols)
dfNew

    AL  AR  BL  BR
0   1   2   3   4
1   1   2   3   4

для меня, я думаю, что должен быть намного лучший путь, может быть, даже 1-строчный, но этот работает, и вы можете двигаться дальше санализ.

0 голосов
/ 04 декабря 2018

Мой Python действительно ржавый, но вот моя попытка:

Скажем, у вас есть кортеж, tup:

tup = (1,2,3,4)

Есть специальный оператор '*', который распаковывает кортежи (есть такжедвойная звезда "**").

Вы можете использовать его, чтобы распаковать ваши кортежи и затем сохранить их в списках:

list_ = [*tup]

Очень просто!

Теперь, если вы хотите превратить список_ в строку, существует миллион вариантов:

string_ = "".join(list_)

"" означает, присоединиться к списку, не используя ничего в качестве разделителя.

Надеюсь, что это делает!

edit: промежуточныйшаг не обязателен, вы можете просто сделать "".join(tup), но я подозревал, что вам нужен список больше, чем строка

...