Функция захвата строки, выдающая неизвестную ошибку - PullRequest
0 голосов
/ 24 апреля 2018

df71 равно:

                                            PIC_1  p_lgth  Wgt
                   420294189300189843900787520557      30  112
                   420951119300189843900787520618      30   64
**PARTIAL-DECODE***P / 42011721930018984390078...      53  112
                   420112289300189843900782713107      30  144
                   420212369300189843900787520397      30   70

Ниже приведена функция, которую я применяю к каждой строке df71 с помощью apply ()

def pic_mod(row):
 if row['p_lgth'] !=30:
    n = row['PIC_1'].str.find('42')
    PIC_2 = row['PIC_1'].str[int(n):int(n+28)]
 elif row['p_lgth']==30:
    PIC_2=row['PIC_1']  
 return PIC_2


df71['PIC_1_master'] = df71.apply(pic_mod, axis=1)

Когда я запускаю приведенный выше код, я получаю:

File "<ipython-input-192-9d112a2f0924>", line 3, in pic_mod
  n = row['PIC_1'].str.find('42')

AttributeError: ("'str' object has no attribute 'str'", 'occurred at 
index   2')

Почему !!! ???? Ниже приведены типы данных на случай, если вам интересно.

df71.dtypes

PIC_1     object
p_lgth     int64
Wgt       object

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Когда вы используете pd.DataFrame.apply, объект, подобный серии, передается функции, где компоненты могут быть извлечены с помощью синтаксиса row['col'].

Теперь row['col'] будет представлять элемент вашей серии, поэтому, скорее всего, это скаляр, например str или int или float. Если это строка, у нее не будет доступа str, как у объекта pd.Series.

Поэтому удалите все экземпляры атрибутов str в pic_mod:

  • Заменить row['PIC_1'].str.find('42') на row['PIC_1'].find('42').
  • Заменить row['PIC_1'].str[int(n):int(n+28)] на row['PIC_1'][int(n):int(n+28)].
0 голосов
/ 24 апреля 2018

row['PIC_1'] уже str. Вы пытаетесь получить атрибут str от уже str типа, поэтому он жалуется.

Вместо этого измените его на row['PIC_1'].find('42)

В будущем, если у вас есть что-то, что не str, вы не попытаетесь получить доступ к атрибуту, а вместо этого сделаете str(112233445542), чтобы преобразовать его в str.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...