2017-05-19 25 views
0

私はpandasとPython3.4を使ってデータを操作しています。特定のcsvファイルに問題があります。私はなぜnan値であっても、パンダは普通はfloatという列を読みます。ここでは、それらをstringと読みます。ここに私のcsvファイルは次のようになります。pandas DataFrameの列をnan値で浮動小数点に変換

Date  RR TN TX 
08/10/2015 0 10.5 19.5 
09/10/2015 0 5.5 20 
10/10/2015 0 5 24 
11/10/2015 0.5 7 24.5 
12/10/2015 3 12 23 
... 
27/04/2017       
28/04/2017       
29/04/2017       
30/04/2017       
01/05/2017       
02/05/2017       
03/05/2017       
04/05/2017       

問題は、私はので最後にnan値のfloatに変換することはできませんです。私はfloatとしてそれらを必要としているので、私はしようとしているTN + TX。 これは私がこれまで試したものです:

ファイル読み込み:私も試した加算を実行するために、現時点では、それ以外の場合は

dtype = { 
    'TN': np.float, 
    'TX': np.float 
} 
dfs[code] = pd.read_csv(path, sep = ';', index_col = 0, parse_dates = True, encoding = 'ISO-8859-1', dtype = dtype) 

::私も試した

dfs[code] = pd.read_csv(path, sep = ';', index_col = 0, parse_dates = True, encoding = 'ISO-8859-1', dtype = float) 

私はいつも同じエラーが発生します:

ValueError: could not convert string to float. 

値がnanであるかどうかをテストしていますが、これは簡単な方法があると確信しています。あなたはそれをする方法を知っていますか?それとも行ごとに行なわなければならないのですか?ありがとう。

+1

は、なぜあなたは '9月を使用している= ';'、'あなたのファイルは空白で区切られている場合は? – Taylor

+0

@Taylor ';'で区切られていますが、読みやすくするために例文に白い空白を付けて書きました。 – Silveris

答えて

1

pandasがdtype自体を検出できるようにすると、ValueErrorを回避し、根本的な問題を明らかにすることができます。

In [4]: df = pd.read_csv(path, sep=';', index_col=0, parse_dates=True, low_memory=False) 
In [5]: df 
Out[5]: 
Empty DataFrame 
Columns: [] 
Index: [08/10/2015 0 10.5 19.5, 09/10/2015 0 5.5 20, 10/10/2015 0 5 24, 11/10/2015 0.5 7 24.5, 12/10/2015 3 12 23, 27/04/2017      , 28/04/2017      , 29/04/2017      , 30/04/2017      , 01/05/2017      , 02/05/2017      , 03/05/2017      , 04/05/2017  ] 

あなたのファイルが空白で区切られているとして、あなたは、事故によって​​3210としてのセパレータを指定するようです。セミコロンがないので、行全体がインデックスに読み込まれます。

まず、

df = pd.read_csv(path, delim_whitespace=True, index_col=0, parse_dates=True, low_memory=False) 

は今、行の一部が不完全なデータを持って適切な区切り文字を使用して、ファイルの読み込みしてみてください。単純な解決策は、値をnp.floatに変換し、それ以外の場合はnp.nanに置き換えることです。

def f(x): 
    try: 
     return np.float(x) 
    except: 
     return np.nan 

df["TN"] = df["TN"].apply(f) 
df["TX"] = df["TX"].apply(f) 

print(df.dtypes) 

この戻り、必要に応じて

RR  object 
TN float64 
TX float64 
dtype: object 
+0

ありがとう!これは完全に機能しました。私は 'apply()'メソッドを完全に忘れてしまった。 – Silveris

関連する問題