将元组转换为字符串以进行机器学习研究中的功能

时间:2018-12-03 21:02:52

标签: python pandas machine-learning scikit-learn

我具有要在机器学习算法中使用的功能的DataFrame。数据框如下所示:

features dataframe 我想将此数据帧用作ML算法(例如,Random Forest或ANN)的输入。但是我得到了错误 ValueError:设置具有序列的数组元素。

我认为是因为元组。有什么方法可以将所有元组都转换为字符串?

2 个答案:

答案 0 :(得分:0)

从像您这样的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-liner,但是这种方法行之有效,您可以继续进行分析。

答案 1 :(得分:-2)

我的Python确实很生锈,但这是我的尝试:

假设您有一个元组,tup:

tup = (1,2,3,4)

有一个特殊的运算符“ *”,用于对元组进行解包(还有双星“ **”)。

您可以使用它来打开元组的包装,然后将其保存到列表中:

list_ = [*tup]

非常简单!

现在,如果您要将list_转换为字符串,则有不计其数的选择:

string_ = "".join(list_)

“”表示不使用分隔符加入列表。

希望能做到!

编辑:中间步骤不是必需的,您可以执行"".join(tup),但我怀疑您需要的列表比字符串还多