修正方法: .str アクセサーは文字列値でのみ使用できます


Python の使用時に発生する可能性のあるエラーは次のとおりです。

 AttributeError : Can only use .str accessor with string values!

このエラーは通常、pandas DataFrame の文字列列のパターンを置換しようとしたときに、操作している列が実際には文字列ではない場合に発生します。

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

次のパンダ データフレームがあるとします。

 import pandas as pd

#createDataFrame
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! 

「points」列が文字列列ではないため、エラーが発生します。

エラーを修正する方法

このエラーを回避する最も簡単な方法は、「points」列の値を置換する前に.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

「points」列の小数点以下の桁はすべて置き換えられており、「points」列の値を置き換える前に.astype(str)関数を使用したため、エラーは発生していないことに注意してください。

: replace()関数の完全なドキュメントはここで見つけることができます。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

パンダの KeyError を修正する方法
修正方法: ValueError: float NaN を int に変換できません
修正方法: ValueError: オペランドをシェイプでブロードキャストできませんでした

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です