AttributeError: 'Series' object has no attribute 'label'
AttributeError: 'Series' object has no attribute 'label'
我正在尝试学习神经网络中声音分类的教程,我发现了同一个教程的 3 个不同版本,所有这些版本都有效,但它们在代码的这一点上都遇到了障碍,在那里我遇到了 "AttributeError: 'Series' object has no attribute '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'
您当前实施的 parser(row)
方法 return 是 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)
中的应用方法将 return 变成 DataFrame
,因此您的其他代码将起作用。
我不能说你正在学习的教程。也许他们遵循了 pandas 的旧版本,该版本允许列表自动转换为 DataFrame
.
我正在尝试学习神经网络中声音分类的教程,我发现了同一个教程的 3 个不同版本,所有这些版本都有效,但它们在代码的这一点上都遇到了障碍,在那里我遇到了 "AttributeError: 'Series' object has no attribute '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'
您当前实施的 parser(row)
方法 return 是 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)
中的应用方法将 return 变成 DataFrame
,因此您的其他代码将起作用。
我不能说你正在学习的教程。也许他们遵循了 pandas 的旧版本,该版本允许列表自动转换为 DataFrame
.