2016-09-30 83 views
2

試圖回答這個問題Get List of Unique String per Column我們遇到了與我的數據集不同的問題。當我將這個CSV文件導入數據框時,每一列都是OBJECT類型,我們需要將只有數字的列轉換爲實數(數字)dtype,而那些不是數字的列轉換爲字符串dtype。將對象dtype列轉換爲datafrane中的Number Dtype大熊貓

有沒有辦法做到這一點?

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
使用上df.values.ravel

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) 


使用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