50115


dataframeの2列目の値をすべて読み込み、計算した後編集するプログラムをpandasで作成しております。  
その中で  
`TypeError: unsupported operand type(s) for -: 'str' and 'float'`  
と表示され、計算できなく困っております。

作成したdataframeのdf_rawの中身はこのような中身です。

[![df_raw](https://i.stack.imgur.com/8pKHG.png)](https://i.stack.imgur.com/8pKHG.png)  
[7801 rows x 2 columns]

列"c04"をfor分で取り込み、計算したいと考えました。

[code]

    for i in range(0,len(df_raw.index)):
        x1 = df_raw.iloc[i,1]
        y1 = df_raw.iloc[1,i]
        a1 = float(a)
        b1 = float(b)
    
        print(x1,type(x1))
        print(y1,type(y1))
        print(a1,type(a1))
        print(b1,type(b1))
    
        ans = y1 - (a1 * x1 + b1)
        df_keisan.loc[i,1] = ans
    
[/code]

実行結果  
-48.838847629331696 (class 'float')  
-11.989996 (class 'str')  
0.0008421538461541317 (class 'float')  
36.817853842785226 (class 'float')

* * *

TypeError Traceback (most recent call last)  
`<ipython-input-81-db8b0808526b> in <module>()`  
10 print(a1,type(a1))  
11 print(b1,type(b1))  
\---> 12 ans = y1 - (a1 * x1 + b1)  
13 df_keisan.loc[i,1] = ans

TypeError: unsupported operand type(s) for -: 'str' and 'float'

`for i in range(0,len(df_raw.index)):`  
を`i=1`に変更すると思い通りにすべてfloat型になって計算できることは確認済みです。  
よろしくおねがいします。


CC BY-SA 4.0
2018-11-09T05:28:11.707
50112
2018-11-09T06:06:55.847
29536
question
python pandas
pandas 特定の列すべてを計算して編集したいが、for分内でilocで値取り出すとstrになる現象


とりあえず

[code]

    print(df_raw.dtypes)
    
[/code]

を実行して、各列のデータ型を確認してください。  
書かれている現象から推測すると、おそらくc01列は（もしくはc01列とc02列共に） **object** 型なのではないでしょうか

その場合、

[code]

    df_raw = df_raw.astype({'c01':'float', 'c02':'float'})
    
[/code]

のように型を **float** 型に変更してみると問題が解決するかもしれません。

もし、それでもエラーが出るようであればどこかの行に文字列が混入している可能性がありますので、データを再度確認してみるてください

* * *

あと、質問とは関係ありませんが、

[code]

    y1 = df_raw.iloc[1,i]
    
[/code]

の箇所は iが2以上で範囲外となりますので、間違っているのではないでしょうか。


CC BY-SA 4.0
2018-11-09T06:06:55.847
50115
2018-11-09T06:06:55.847
24801
50112
answer