【问题标题】:Cannot feed dataframe containing also array column in Sklearn MLPClassifier无法在 Sklearn MLPClassifier 中提供还包含数组列的数据框
【发布时间】:2021-04-02 21:00:47
【问题描述】:

我对 Python 和数据框比较陌生。我有数据框,其中一列是数组(来自 wav 的 mfcc 数据,所有行中的数组都具有相同的长度 273),其他列是浮点列。 代码比较简单:

train_mfccs, test_mfccs, train_labels, test_labels = train_test_split(df, Y, test_size=0.1, shuffle= True)

clf = MLPClassifier(max_iter=150)
clf.fit(train_mfccs, train_labels)

由于错误 - ValueError: setting an array element with a sequence,我无法将整个数据框放入 fit 方法中。

如果我只在数据框中留下数组列,或者只保留浮点列,但不能同时保留两者,我可以成功获得结果。 此外,我尝试使用 np 数组而没有结果,因为它要求每个新列的形状与第一列相同。 我尝试了添加相同形状的列的简单方法,然后仅填充第一个值。

但这给出了意想不到的形状 (50000, 1638) 虽然我想要 (50000,2) 其中:

  • 第一列是长度为 273 的初始数组
  • second 是长度为 273 且第一个值等于 attr1 的新数组。
X = np.array(list(df['mfcc']), dtype=np.float)
X0 = np.zeros((50000,273))
for index, value in enumerate(df['attr1']):
        X0[index][0] = value
X = np.hstack((X,X0)) 

这是否可能实现 - 一列是数组,其他不是?

【问题讨论】:

    标签: python arrays pandas dataframe


    【解决方案1】:

    我们可以只添加内部数组数据作为主数据框列。

    示例:我们在数组列中有这样的数据:

    要创建列列表,我们可以生成列名:

    mfccColNames = list(map(str, range(maxlen)))
    print(mfccColNames)
    

    所以我们将数字作为列名:

    ['0', '1', '2', '3', '4', '5', '6'...'272']

    然后填充数据框:

    df_x = pd.DataFrame(df['mfcc'].to_list(), columns=mfccColNames)
    

    这导致所有内部数组数据作为列添加到数据帧中,现在可以在 sklearn 中使用。 然后我们可以根据需要添加之前数据帧中的其他列。

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 2018-05-15
      • 2023-02-05
      • 2016-06-15
      • 1970-01-01
      • 2013-03-29
      • 2017-11-22
      • 1970-01-01
      • 2021-01-11
      相关资源
      最近更新 更多