aはDF

2016-11-30 6 views
0

EDITのすべての要素に適用される:ここでの最初の行は、次のとおりです。aはDF

df = pd.read_csv(os.path.join(path, file), dtype = str,delimiter = ';',error_bad_lines=False, nrows=50) 
df["CALDAY"] = df["CALDAY"].apply(lambda x:dt.datetime.strptime(x,'%d/%m/%Y')) 
df = df.fillna(0) 

私は1500の列と35000行を持つCSVファイルを持っています。それは値を含んでいますが、例えば1.700,35のような形式で、Pythonでは1700.35が必要です。私がcsvを読むと、すべての値はstr型の下にあります。この問題を解決するには

私はこの機能を書いた:

def format_nombre(df): 
    for i in range(length): 
     for j in range(width): 
      element = df.iloc[i,j] 
      if (type(element) != type(df.iloc[1,0])): 
       a = df.iloc[i,j].replace(".","") 
       b = float(a.replace(",",".")) 
       df.iloc[i,j] = b 

は基本的に、私はすべての行と列の各交差点を選択し、私は問題の文字を置き換え、私はフロートに要素をオンにし、私はそれを置き換えますデータフレーム。 ifは、関数がデータフレームの最初の列にある日付を考慮しないことを保証します。

問題は、機能が正確に何をしても、10行をカバーするのに約1分かかるため、CSVを変換するのに60時間弱かかります。

私はこれが最適化されていないことを認識していますが、私は苦労して自分のニーズと(希少な)スキルに合った方法を見つけられませんでした。どの程度

+3

あなたのcsvの区切り記号とは何ですか?たとえば、カンマではない場合は、次のようになります。 'pd.read_csv(your_file、thousands = '。'、decimal = '、' sep = some_separator)' – EdChum

+0

質問の最初の5-6行を構築しようとしているDFの形式。 – MYGz

+0

私はすでに試してみましたが動作しません。 '、'は残っているので、後でそれをフロートに変換することはできません。 –

答えて

0

:すべての文字列を想定しています

def to_numeric(column): 
    if np.issubdtype(column.dtype, np.datetime64): 
     return column 
    else: 
     return column.str.replace('.', '').str.replace(',', '.').astype(float) 

df = df.apply(to_numeric) 

が有効です。それ以外の場合はastype(float)の代わりにpd.to_numericを使用してください。

+0

それは、私は@ EdChumのコメントのソリューションは動作しません驚いていると言われています。 – IanS

+0

このソリューションは完璧です!どうもありがとう ! –

関連する問題