2017-02-14 14 views
1

大規模なデータフレーム、〜100万行と9列、いくつかの行にいくつかの列が欠落しています。Pandas Dataframeオブジェクトタイプ

dat = pd.read_table('file path', delimiter = ';') 

I  z  Sp S  B  B/T  r  gf  k 
0  0.0303 2 0.606 0.31  0.04 0.23  0.03 0.38 
1  0.0779 2    0.00  0.00 0.05  0.01 0.00 

数値がある場合でも最初の数行は文字列として読み込まれ、残りの数はNaNとして読み込まれます。 dtype = 'float64'を含めると、次のように表示されます。

ValueError: could not convert string to float: 

この問題を解決するためのヘルプはありますか?

+0

は、すべての値が浮動小数点数のですか? – Ika8

+0

@ Ika8はい彼らは – Cmf55

+0

ですdtype =オブジェクトで試してください – Ika8

答えて

1

あなたは正規表現によるreplaceを使用することができます - 1またはwhitespacesNaNよりは、その後、read_tableNaNに変換されたデータでfloat

空の文字列にキャストします。

df = df.replace({'\s+':np.nan}, regex=True).astype(float) 
print (df) 
    I  z Sp  S  B B/T  r gf  k 
0 0.0 0.0303 2.0 0.606 0.31 0.04 0.23 0.03 0.38 
1 1.0 0.0779 2.0 NaN 0.00 0.00 0.05 0.01 0.00 

データはNaNに置き換えられる必要があるいくつかの文字列が含まれている場合は使用可能性がapplyto_numericです:

df = df.apply(lambda x: pd.to_numeric(x, errors='coerce')) 
print (df) 
    I  z Sp  S  B B/T  r gf  k 
0 0 0.0303 2 0.606 0.31 0.04 0.23 0.03 0.38 
1 1 0.0779 2 NaN 0.00 0.00 0.05 0.01 0.00 
+0

どのように動作しますか? – jezrael

+0

最後の3つのカラムは、すべて値を持つNaNとしてすべて読み込まれています。それは最初の6のために働く。 – Cmf55

+0

'df.replace({'\ s +':np.nan}、regex = True).astype(float)'または 'to_numeric'ソリューションを使用していますか?最後の3列のデータは数値ですか? – jezrael