Одна ошибка, с которой вы можете столкнуться при использовании Python:
AttributeError : Can only use .str accessor with string values!
Эта ошибка обычно возникает, когда вы пытаетесь заменить шаблон в строковом столбце кадра данных pandas, но столбец, с которым вы работаете, на самом деле не является строкой.
В следующем примере показано, как исправить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, у нас есть следующие Pandas DataFrame:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'points': [6.5, 7.8, 8.0, 9.0, 7.5, 3.4, 6.6, 6.8],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})
#view DataFrame
df
team points assists rebounds
0 A 6.5 5 11
1 A 7.8 7 8
2 A 8.0 7 10
3 A 9.0 9 6
4 B 7.5 12 6
5 B 3.4 9 5
6 B 6.6 9 9
7 B 6.8 4 12
Теперь предположим, что мы пытаемся заменить каждый десятичный знак в столбце «точки» пробелом:
#attempt to replace decimal in "points" column with a blank
df['points'] = df['points']. str.replace('.', '')
AttributeError : Can only use .str accessor with string values!
Мы получаем ошибку, потому что столбец «точки» не является строковым столбцом.
Как исправить ошибку
Самый простой способ обойти эту ошибку — использовать функцию .astype(str) , прежде чем пытаться заменить какие-либо значения в столбце «точки»:
#replace decimal in "points" column with a blank
df['points'] = df['points'].astype (str). str.replace('.', '')
#view updated DataFrame
df
team points assists rebounds
0 A 65 5 11
1 A 78 7 8
2 A 80 7 10
3 A 90 9 6
4 B 75 12 6
5 B 34 9 5
6 B 66 9 9
7 B 68 4 12
Обратите внимание, что каждое десятичное число в столбце «точки» было заменено, и мы не получаем никаких ошибок, так как мы использовали функцию .astype(str) перед попыткой заменить какие-либо значения в столбце «точки».
Примечание.Полную документацию по функции replace() можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:
Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами