1. ホーム
  2. python

[解決済み] ValueError: 文字列をfloatに変換できませんでした: id

2022-03-04 04:13:45

質問

以下のようなPythonスクリプトを実行しています。

#!/usr/bin/python

import os,sys
from scipy import stats
import numpy as np

f=open('data2.txt', 'r').readlines()
N=len(f)-1
for i in range(0,N):
    w=f[i].split()
    l1=w[1:8]
    l2=w[8:15]
    list1=[float(x) for x in l1]
    list2=[float(x) for x in l2]
    result=stats.ttest_ind(list1,list2)
    print result[1]

しかし、次のようなエラーが発生しました。

ValueError: could not convert string to float: id

私はこれに困惑しています。 スクリプトを使ったfor loopではなく、interactiveセクションの1行だけで試してみたところ。

>>> from scipy import stats
>>> import numpy as np
>>> f=open('data2.txt','r').readlines()
>>> w=f[1].split()
>>> l1=w[1:8]
>>> l2=w[8:15]
>>> list1=[float(x) for x in l1]
>>> list1
[5.3209183842, 4.6422726719, 4.3788135547, 5.9299061614, 5.9331108706, 5.0287087832, 4.57...]

よく効きますね。

どなたか少し解説していただけませんか? ありがとうございます。

どのように解決するのですか?

明らかに、一部の行が有効なフロートデータを持っていません。特に、一部の行にはテキストがあります。 id これは浮動小数点に変換できないものです。

対話型プロンプトで試すと、最初の行しか試さないので、一番良い方法は、このエラーが発生した行を印刷することで、間違った行を知ることができます(例)。

#!/usr/bin/python

import os,sys
from scipy import stats
import numpy as np

f=open('data2.txt', 'r').readlines()
N=len(f)-1
for i in range(0,N):
    w=f[i].split()
    l1=w[1:8]
    l2=w[8:15]
    try:
        list1=[float(x) for x in l1]
        list2=[float(x) for x in l2]
    except ValueError,e:
        print "error",e,"on line",i
    result=stats.ttest_ind(list1,list2)
    print result[1]