Используйте оператор if для изменения значения строки - PullRequest
1 голос
/ 29 января 2020

У меня есть фрейм данных ddd с полем date, содержащим грязные значения даты в виде текста:

ddd= pd.DataFrame([["80's of 1900"], ["80's of the 19th century"], ["90's of the 18th century"], ["1955"], ["1822"]], columns=['date'])


In [2]: ddd
Out[2]: 
index date
0     80's of 1900  
1     80's of the 19th century  
2     90's of the 18th century
3     1955
4     1822

Я пытаюсь преобразовать текстовые значения в год, как в строке 3 и 4 для дальнейшего анализа. Чтобы сделать это, я написал для l oop с оператором if для различения строк, таких как 0 и 1, 2.

Пока у меня есть код, который создает массив numpy индексов, где поле date содержит 's of для итерации по этим строкам:

selected_index = ddd[ddd["date"].str.contains('\'s of')].index.values

и a для l oop с некоторым регулярным выражением для перестановки чисел в строке и изменения '80-х из 1900' на 1980 и ' 90-е годы XVIII века до 1790 года:

for index in selected_index:
    if ddd.at[index, 'date'].str.contains('th century')]:
        num = re.findall('[0-9]', ddd.at[index, 'date'])
        num2 = ''.join(num)
        num3 = str(num2)[2:4]
        num4 = int(num3) - 1
        num5 = str(num4)
        num6 = str(num2)[:2]
        ddd.at[index, 'date'] =  num5 + num6
    else:
        num = re.findall('[0-9]', ddd.at[index, 'date'])
        num2 = ''.join(num)
        num3 = str(num2)[:2]
        num4 = str(num2)[2:4]
        ddd.at[index, 'date'] =  num4 + num3

Но я получаю следующую ошибку:

AttributeError: 'str' object has no attribute 'str'

Ожидаемый результат:

index date
0     1980 
1     1880
2     1790
3     1955
4     1822

Заранее спасибо за ваши предложения!

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Ошибка во второй строке,

if ddd.at[index, 'date'].str.contains('th century')]:

.at возвращает значение, а метод .str.contains предназначен для pandas.Series , Вы можете использовать оператор in для проверки состояния,

if 'th century' in ddd.at[index, 'date']:
0 голосов
/ 29 января 2020

ddd.at[index, 'date'] уже str, поэтому вы не можете вызывать свойство str из него. Чтобы проверить, есть ли значение в нем, используйте in

if 'th century' in ddd.at[index, 'date']:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...