2016-09-30 8 views
2

Get List of Unique String per Column私のデータセットとは異なる問題が発生しました。このCSVファイルをすべての列がOBJECT型であるデータフレームにインポートするとき、単に数値である列を実数(数値)dtypeに変換し、数でない列をString dtypeに変換する必要があります。データ型のdtype列をNumber型に変換するPandas

これを達成する方法はありますか?

Download the data sample from here

私は記事Pandas: change data type of columnsを次から次のコード試みたがうまくいきませんでした。

df = pd.DataFrame(a, columns=['col1','col2','col3']) 

いつものようにapply

df.apply(pd.to_numeric, errors='ignore') 

オプション2
01であなたの助け

+0

自動変換は通常起こりますそれ以外の数値の列には他の非数値文字が含まれています。 'df.replace("、 "、"、regex = True).astype(np.int64) 'のようなものを試して、文字を削除してデータを数値型に変換することができます –

答えて

1

オプション1
使用pd.to_numericに感謝注
これらはまったく同じではありません

cvrtd = pd.to_numeric(df.values.ravel(), errors='coerce').reshape(-1, len(df.columns)) 
pd.DataFrame(np.where(np.isnan(cvrtd), df.values, cvrtd), df.index, df.columns) 

df.values.ravel上使用pd.to_numeric。混合値を含むいくつかの列では、オプション2は可能な変換を行い、オプション2はその列のすべてをオブジェクトにします。カンマやがある場合、あなたのファイルを見てみると、タイプのオブジェクトへのすべての列の私は、オプションを選択したい1.


タイミング

df = pd.read_csv('HistorianDataSample/HistorianDataSample.csv', skiprows=[1, 2]) 

enter image description here

+0

pd.to_numericは既にベクトル化されていますほとんど適用する必要はありません – Jeff

+0

@Jeffデータフレーム全体に 'pd.numeric'を適用するにはどうすればいいですか?それが私がここでやろうとしていることです。さらに、 'df'を最初に積み重ねることもできましたが、各列は異なるかもしれません。 'errors = 'ignore'はスタックされたシリーズの要素が変換されない場合に変換を停止します。 'errors = 'coerce''を使用すると、数値ではないすべての値が' nan'になります。私は 'apply'を使って各カラムを別々に操作することしか考えられません。各列についてベクトル化されます。 – piRSquared

+0

.ravel()を使用し、 – Jeff

関連する問題