首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python AttributeError:'str‘对象对于作为熊猫数据框架的对象没有属性“”

python AttributeError:'str‘对象对于作为熊猫数据框架的对象没有属性“”
EN

Stack Overflow用户
提问于 2017-05-13 09:39:10
回答 2查看 1.4K关注 0票数 0

我希望将我创建的包含需要的值的dataframe对象的一部分分配给一个新对象。但是,当我试图运行python文件时,我会收到一个错误,该文件说string对象对于我创建的包含值的对象没有属性。不知道是怎么回事。

代码语言:javascript
复制
AttributeError: 'str' object has no attribute 'vowel_map'

training.txt文件是:

代码语言:javascript
复制
COED:K OW1 EH2 D
PURVIEW:P ER1 V Y UW2
HEHIR:HH EH1 HH IH0 R
MUSCLING:M AH1 S AH0 L IH0 NG
NONPOISONOUS:N AA0 N P OY1 Z AH0 N AH0 S
LAVECCHIA:L AA0 V EH1 K IY0 AH0
BUCKLED:B AH1 K AH0 L D
EATEN:IY1 T AH0 N
SCIMED:S AY1 M EH2 D
MORTIS:M AO1 R T IH0 S
CONSERVATOR:K AH0 N S ER1 V AH0 T ER0

我正在运行的python文件是:

代码语言:javascript
复制
import pandas as pd
import string

vowels = ('AA','AE','AH','AO','AW','AY','EH','ER','EY','IH','IY','OW','OY','UH','UW')

def remove_stress(string):
    if type(string) in [list, tuple]:
        string = ' '.join(string)
    return ''.join([i for i in string if not i.isdigit()]).split()

def phoneme_map(phon_list, phoneme_list):
    return [1 if phoneme in phoneme_list else 0 for phoneme in phon_list]

def get_words(file_path):
    words = pd.read_csv(file_path, sep=':', names = ['word', 'string_of_phon'])
    words['phon_list'] = words.string_of_phon.apply(str.split)
    words['stressless_phon_list'] = words.string_of_phon.apply(remove_stress)
    words['vowel_map'] = words.stressless_phon_list.apply(phoneme_map, args = (vowels,))

    return words

if __name__ == '__main__':
    data_loc = 'training.txt'
    words = get_words(data_loc)

    word_vowels = [word.vowel_map for word in words]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-13 10:37:57

如果你想要一个热编码元音:

代码语言:javascript
复制
from sklearn.feature_extraction.text import CountVectorizer

vowels = ['AA','AE','AH','AO','AW','AY','EH','ER','EY','IH','IY','OW','OY','UH','UW']

df = pd.read_csv(file_path, sep=':', names = ['word', 'string_of_phon'])
vect = CountVectorizer(vocabulary=[v.lower() for v in vowels])    
X = vect.fit_transform(df['string_of_phon'].str.replace(r'\d+', ''))    
r = pd.DataFrame(X.A, columns=vect.get_feature_names(), index=df.index)

收益率

代码语言:javascript
复制
In [138]: r
Out[138]:
    ao  er  uw  eh  oy  ey  ow  ih  uh  ah  ay  iy  ae  aw  aa
0    0   0   0   1   0   0   1   0   0   0   0   0   0   0   0
1    0   1   1   0   0   0   0   0   0   0   0   0   0   0   0
2    0   0   0   1   0   0   0   1   0   0   0   0   0   0   0
3    0   0   0   0   0   0   0   1   0   2   0   0   0   0   0
4    0   0   0   0   1   0   0   0   0   2   0   0   0   0   1
5    0   0   0   1   0   0   0   0   0   1   0   1   0   0   1
6    0   0   0   0   0   0   0   0   0   2   0   0   0   0   0
7    0   0   0   0   0   0   0   0   0   1   0   1   0   0   0
8    0   0   0   1   0   0   0   0   0   0   1   0   0   0   0
9    1   0   0   0   0   0   0   1   0   0   0   0   0   0   0
10   0   2   0   0   0   0   0   0   0   2   0   0   0   0   0

您可以使用原始的DF加入它:

代码语言:javascript
复制
In [139]: df.join(r)
Out[139]:
            word               string_of_phon  ao  er  uw  eh  oy  ey  ow  ih  uh  ah  ay  iy  ae  aw  aa
0           COED                  K OW1 EH2 D   0   0   0   1   0   0   1   0   0   0   0   0   0   0   0
1        PURVIEW                P ER1 V Y UW2   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0
2          HEHIR              HH EH1 HH IH0 R   0   0   0   1   0   0   0   1   0   0   0   0   0   0   0
3       MUSCLING         M AH1 S AH0 L IH0 NG   0   0   0   0   0   0   0   1   0   2   0   0   0   0   0
4   NONPOISONOUS  N AA0 N P OY1 Z AH0 N AH0 S   0   0   0   0   1   0   0   0   0   2   0   0   0   0   1
5      LAVECCHIA        L AA0 V EH1 K IY0 AH0   0   0   0   1   0   0   0   0   0   1   0   1   0   0   1
6        BUCKLED              B AH1 K AH0 L D   0   0   0   0   0   0   0   0   0   2   0   0   0   0   0
7          EATEN                  IY1 T AH0 N   0   0   0   0   0   0   0   0   0   1   0   1   0   0   0
8         SCIMED                S AY1 M EH2 D   0   0   0   1   0   0   0   0   0   0   1   0   0   0   0
9         MORTIS              M AO1 R T IH0 S   1   0   0   0   0   0   0   1   0   0   0   0   0   0   0
10   CONSERVATOR    K AH0 N S ER1 V AH0 T ER0   0   2   0   0   0   0   0   0   0   2   0   0   0   0   0
票数 2
EN

Stack Overflow用户

发布于 2017-05-13 10:07:16

IIUC:

代码语言:javascript
复制
In [85]: vowels = set(vowels)

In [86]: words['vowel_map'] =  \
            words['string_of_phon'].str.replace(r'\d+', '').str.split() \
                 .apply(lambda x: [int(i in vowels) for i in x])

In [87]: words
Out[87]:
            word               string_of_phon                       vowel_map
0           COED                  K OW1 EH2 D                    [0, 1, 1, 0]
1        PURVIEW                P ER1 V Y UW2                 [0, 1, 0, 0, 1]
2          HEHIR              HH EH1 HH IH0 R                 [0, 1, 0, 1, 0]
3       MUSCLING         M AH1 S AH0 L IH0 NG           [0, 1, 0, 1, 0, 1, 0]
4   NONPOISONOUS  N AA0 N P OY1 Z AH0 N AH0 S  [0, 1, 0, 0, 1, 0, 1, 0, 1, 0]
5      LAVECCHIA        L AA0 V EH1 K IY0 AH0           [0, 1, 0, 1, 0, 1, 1]
6        BUCKLED              B AH1 K AH0 L D              [0, 1, 0, 1, 0, 0]
7          EATEN                  IY1 T AH0 N                    [1, 0, 1, 0]
8         SCIMED                S AY1 M EH2 D                 [0, 1, 0, 1, 0]
9         MORTIS              M AO1 R T IH0 S              [0, 1, 0, 0, 1, 0]
10   CONSERVATOR    K AH0 N S ER1 V AH0 T ER0     [0, 1, 0, 0, 1, 0, 1, 0, 1]

现在,您可以将计算过的列分配给另一个对象:

代码语言:javascript
复制
In [88]: word_vowels = words.vowel_map

In [89]: word_vowels
Out[89]:
0                       [0, 1, 1, 0]
1                    [0, 1, 0, 0, 1]
2                    [0, 1, 0, 1, 0]
3              [0, 1, 0, 1, 0, 1, 0]
4     [0, 1, 0, 0, 1, 0, 1, 0, 1, 0]
5              [0, 1, 0, 1, 0, 1, 1]
6                 [0, 1, 0, 1, 0, 0]
7                       [1, 0, 1, 0]
8                    [0, 1, 0, 1, 0]
9                 [0, 1, 0, 0, 1, 0]
10       [0, 1, 0, 0, 1, 0, 1, 0, 1]
Name: vowel_map, dtype: object
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43951573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档