2016-10-12 11 views
1

小数点の区切り記号が,のCSVをロードしており、解析を進めるために.に置き換えたいと思います。小数点記号を変換する

pandas.read_csvにはconvertersオプションがありますが、それを使用するには、変換するすべてのカラム名のリストを提供する必要があります。

私が気にしているのは、すべての列の各セルを調べて置き換えることです。

ii = len(list(df))-1 
print ii 
jj = len(df.ix[:,0]) 
print jj 
for i in range(0, ii): 
    for j in range(0, jj): 
     df.ix[i,j] = df.ix[i,j].to_string().replace(',' , '.') 

もっと良いアプローチがありますか?

+3

を) '? – root

+0

これはうまくいくようですが、 'engine = 'python''を削除しなければなりませんでした(明らかに悪影響はありません)。 – KcFnMi

+0

さて、私のコメントを答えに加えました。あなたが絶対に必要としない限り、 'engine = 'python''を使わないほうがいいでしょう。デフォルトのCエンジンは高速です。 – root

答えて

3

あなたはread_csvdecimalパラメータ使用することができます。すなわち、 `pd.read_csv(file.csvになり、小数= ''、あなただけのread_csv``の `decimal`パラメータを使用することはできません

df = pd.read_csv(file.csv, decimal=',') 
0

すべての列名をconverterに指定する必要はありません。

は、あなたがそれは質問をrewording後converter = {'col_name':lambda x : str(x).replace(',','.')}

EDITだろう

を変換したい列のみを与えます。

これを行う最も良い方法ですか?

私ははいと言います。 OPは、変換したい列が多数あり、dictが外れると感じています。 IMO、それはしません。なぜそうしないのか2つの理由があります。

最初の理由は、多数の列を持っていても、それにパターンがあると思います(列番号2,4など...変換する必要があります)。 forループまたはリスト内包を実行してdictを生成し、それをコンバータに渡すことができます。もう1つの利点は、コンバーターが列ラベルと列インデックスの両方をキーとして受け入れ、列ラベルについて言及する必要がないことです。

第2に、dictは、ハッシュテーブルを使用して実装されます。これにより、最悪の場合のルックアップが一定時間であることが保証される。したがって、辞書内に多数の要素を使用しているときに実行時間が遅くなることを心配する必要はありません。

あなたの方法は間違いありませんが、IMOはホイールを再発明しています。

+0

質問はあなたの答えに関して編集されました。 '、'を含むすべての列からリストを取得する方法は? – KcFnMi

関連する問題