2016-03-20 5 views
1

を私はスパークでPythonと協力し、その最初の数行です.csvファイルから私のデータセットを読んでいます:パイソン(pyspark)エラー=とValueError:float型に文字列を変換できませんでした:「17」

17 0.2 7 
17 0.2 7 
39 1.3 7 
19 1 7 
19 0 7 
私はこのエラーを取得する

# Load and parse the data 
def parsePoint(line): 
    values = [float(x) for x in line.replace(',', ' ').split(' ')] 
    return LabeledPoint(values[0], values[1:]) 

Traceback (most recent call last): 
    File "<stdin>", line 3, in parsePoint 
ValueError: could not convert string to float: "17" 

どれHEL私は以下のコードを持つファイルから一行ずつ読み込ん

pは大変感謝しています。

+2

'.split( '')'ではなく '.split( '|')'を使用する必要があります。 – zondo

+0

これらを '|'私の質問を掲示している間にセルの境界線を明確にする実際のファイルには存在しません。 –

+1

ああ、空白があればそれができるはずです。あなたの質問にちょうどそれがファイルにどのようにテキストを置く。 – zondo

答えて

0

この回答以下のコメントに続いて、あなたが使用する必要があります。

[float(x.strip(' "')) for x in line.split(',')] 

あなたは単にsplit,にあなたがすべき、' '','を交換する必要があり、その後、先頭と末尾の空白と引用符(x.strip(' "'))を削除しないでくださいfloatに変換する前に

また、作業を簡略化するcsvパッケージをご覧ください。


下記はコメントの前に元の質問に対する回答です。

.split(' ')の代わりに.split()を使用する必要があります。行に複数の連続する空白文字があるため、' 'に分割すると、空の文字列が表示されます。

['17', '', '0.2', '', '7'] 

問題は、あなたが(明らかに)floatに変換することができないものを空の文字列は次のとおりにあなたの最初の行が分割されています。

そのsep引数がNoneときsplitの行動に問題のおかげで解決しますsplit()を使用する(または存在しない):

If the optional second argument sep is absent or None, the words are separated by arbitrary strings of whitespace characters (space, tab, newline, return, formfeed).

splitのドキュメント、および違いを理解するために、小さな例を参照してください。

>>> sp5 = ' ' * 5 
>>> sp5.split() 
[] 
>>> sp5.split(' ') 
['', '', '', '', '', ''] 
+0

私はあなたが言ったように正確に試みました。今度は、35という別の値に不平を言う以外は同じエラーです。 'トレースバック(直近の呼び出し最後): ファイル" "、行3、parsePoint ValueError:文字列をfloatに変換できませんでした:" 35 " ' –

+0

@EmreBulutこの '35'の行を表示できますか? – Holt

+0

ファイルの行数が100万を超えています。私は文句を言っているかわかりません。 今回はテキストエディタでファイルを開きました: "35"、 "1.3"、 "7" "29"、 "1"、 "7" "24"、 "1.2"、 "7" "24"、 "1.1"、 "7" "19"、 "0"、 "7" "36"、 "0"、 "7" "19"、 "1.2"、 "7" "24"、 "1.3"、 "7" –

関連する問題