2016-08-31 13 views
0

私は数字が'12 .5% 'のようなテキストとして保存されたデータフレーム "b"を持っています。 一つの列には、次のとおりです。Pythonのdf pandasへの適用関数 - 属性エラー

1  NaN 
2  NaN 
3  1.2% 
4  0.6% 
5  NaN 
6  1.4% 
7  0.1% 
8  NaN 
9  5.1% 
10  2.5% 
11 89.1% 
12  NaN 
Name: Idaho, dtype: object 

私は各列に適用する関数を書いてきました:

def sinPorc(tbl): 
    return float(tbl.replace('%', '')) 

が、私はそれを適用しようとすると、私が取得:

b.Idaho.apply(sinPorc) 

AttributeError: 'float' object has no attribute 'replace'

私はまた、テーブルの例を作成し、関数を適用しましたが、この場合は機能しました:

ejemplo=pd.DataFrame({'A':['1.3%', 'NaN'], 
       'B':['1.3%', '0.7%']}) 

ejemplo.A.apply(sinPorc) 

と私は期待した結果だ:私は、元のテーブルに関数を適用することはできませんなぜ私にはわからない

1.3 
    NaN 
Name: A, dtype: float64 

を。何が問題なのか、それを解決するために何をすべきですか?

ありがとうございました。 NaNの

np.NaN.replace('%', '') 

...これを試してみてください文字列が、float値np.NaN

なかったし、あなたが同じエラーになりますので、

+1

'def'関数で' float(str(tbl).replace ') 'を試してください。あなたの行要素を' replace'の 'string'としてキャストする必要があります。働く –

+0

ありがとう@NickilMaveli、それはいいです。元の関数がなぜ2番目のテーブルで機能したのか分かりません。 – GabyLP

+0

列のような音にはすでに浮動小数点値が含まれています。私は値を文字列型として、そして次に浮動小数点型として複製しようとしました。インデックス0の値が 'NaN'ではないと仮定して、' type(b.Idaho [0]) 'とタイプしてデバッグすると役に立ちます。 –

答えて

2

あなたの元のメソッドは動作しませんでした。

AttributeError: 'float' object has no attribute 'replace' 

あなたは他のパンダの機能のために役立ちますあなたのNaN値を浮き袋になる、またはNickilはコメントで述べたようにあなたは、文字列に値を強制することができ

def sinPorc(tbl): 
    if tbl is np.NaN: 
     return tbl 
    else: 
     return float(tbl.replace('%', '')) 

sinPorcを変更することができます。

float(str(tbl).replace('%', '')) 
関連する問題