我具有要在机器学习算法中使用的功能的DataFrame。数据框如下所示:
features dataframe 我想将此数据帧用作ML算法(例如,Random Forest或ANN)的输入。但是我得到了错误 ValueError:设置具有序列的数组元素。
我认为是因为元组。有什么方法可以将所有元组都转换为字符串?
答案 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)
,但我怀疑您需要的列表比字符串还多