AttributeError: у объекта 'Series' нет атрибута 'label'
Я пытаюсь следовать руководству по классификации звука в нейронных сетях, и я нашел 3 разные версии одного и того же учебника, и все они работают, но все они достигают загвоздки в коде, где я получаю "AttributeError: у объекта" Series "нет атрибута" label "". Я не особо знаком с NN или Python, поэтому извиняюсь, если это что-то тривиальное, как ошибка устаревания, но я не могу понять это сам.
def parser(row):
# function to load files and extract features
file_name = os.path.join(os.path.abspath(data_dir), 'Train/train', str(row.ID) + '.wav')
# handle exception to check if there isn't a file which is corrupted
try:
# here kaiser_fast is a technique used for faster extraction
X, sample_rate = librosa.load(file_name, res_type='kaiser_fast')
# we extract mfcc feature from data
mfccs = np.mean(librosa.feature.mfcc(y=X, sr=sample_rate, n_mfcc=40).T,axis=0)
except Exception as e:
print("Error encountered while parsing file: ", file)
return None, None
feature = mfccs
label = row.Class
return [feature, label]
temp = train.apply(parser, axis=1)
temp.columns = ['feature', 'label']
from sklearn.preprocessing import LabelEncoder
X = np.array(temp.feature.tolist())
y = np.array(temp.label.tolist())
lb = LabelEncoder()
y = np_utils.to_categorical(lb.fit_transform(y))
Как уже упоминалось, я видел три разных урока на одну и ту же тему, каждый из которых заканчивается одинаковым фрагментом "temp = train.apply(parser, axis=1) temp.columns = ['feature', 'label']", так что я предполагаю, что это назначает правильно, но я не знаю, где это происходит иначе. Помощь оценена!
Редактировать: трассировка по запросу, оказывается, я добавил неправильный трассировку. Кроме того, с тех пор я узнал, что это случай преобразования объекта серии в фрейм данных, поэтому любая помощь с этим была бы полезной.
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-17-1613f53e2d98> in <module>()
1 from sklearn.preprocessing import LabelEncoder
2
----> 3 X = np.array(temp.feature.tolist())
4 y = np.array(temp.label.tolist())
5
/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)
4370 if self._info_axis._can_hold_identifiers_and_holds_name(name):
4371 return self[name]
-> 4372 return object.__getattribute__(self, name)
4373
4374 def __setattr__(self, name, value):
AttributeError: 'Series' object has no attribute 'feature'
1 ответ
Ваша текущая реализация parser(row)
Метод возвращает список для каждой строки данных из train
DataFrame. Но затем он собирается как объект pandas.Series.
Так что ваши temp
на самом деле Series
объект. Тогда следующая строка не имеет никакого эффекта:
temp.columns = ['feature', 'label']
поскольку temp
это Series
, он не имеет никаких столбцов, и, следовательно, temp.feature
а также temp.label
не существует и, следовательно, ошибка.
Измени свой parser()
метод следующим образом:
def parser(row):
...
...
...
# Return pandas.Series instead of List
return pd.Series([feature, label])
Делая это, применить метод из temp = train.apply(parser, axis=1)
вернет DataFrame
, так что ваш другой код будет работать.
Я не могу сказать об уроках, которые вы читаете. Возможно они следовали за более старой версией панд, которая позволяла автоматически преобразовывать список в DataFrame
,