我在.csv文件以下數據集:如何排除熊貓數據框的某些列?
feature1, feature2, feature3, feature4
0, 42, 2, 1000
2, 13, ?, 997
1, 30, ?, 861
2, 29, ?, ?
我想創建一個數據幀大熊貓或numpy的陣列,其中我不具有與未知數據的x%的特徵(其中,x之前在代碼中指定)。
我在.csv文件以下數據集:如何排除熊貓數據框的某些列?
feature1, feature2, feature3, feature4
0, 42, 2, 1000
2, 13, ?, 997
1, 30, ?, 861
2, 29, ?, ?
我想創建一個數據幀大熊貓或numpy的陣列,其中我不具有與未知數據的x%的特徵(其中,x之前在代碼中指定)。
通過使用replace
和dropna
(PS,你需要使用dropna參數THRESH)
import pandas as pd
import numpy as np
df.replace('?', np.NaN).dropna(axis=1,thresh=0.75*len(df)) # for you example , we only accpet one NA here
Out[735]:
feature1 feature2 feature4
0 0 1 100.0
1 2 2 900.0
2 1 3 861.0
3 2 4 NaN
數據輸入
df = pd.DataFrame({'feature1': [0,2,1,2], 'feature2': [1,2,3,4],'feature3':[2,'?','?','?'],'feature4':[100,900,861,'?']})
哇,這似乎是SO網站中的一種錯誤。您之前發佈了答案,然後將其刪除。當我正在處理我的答案時,我保持打開頁面,並不斷檢查是否有人已經回答。但是,該網頁並未顯示您的答案,因爲我猜,您「取消刪除」了原始答案。所以沒有顯示任何新的答案。所以,我無法知道任何人已經回答。 –
我打算假設那些'?'
爲空值。如果他們不這樣做,請執行如下操作:
df = df.apply(pd.to_numeric, errors='coerce')
現在,我們可以製作一個採用數據幀和閾值的函數。我們想要做的是使用loc
和一個布爾序列,告訴我們哪些列有足夠的數據表示。
drp = lambda d, x: d.loc[:, d.isnull().mean() < x]
drp(df, .5)
feature1 feature2 feature4
0 0 42 1000.0
1 2 13 997.0
2 1 30 861.0
3 2 29 NaN
如果你堅持認爲'?'
保持這樣的......我們還可以包括NaN
d = df.mask(df.astype(object).eq('?'))
drp = lambda d, x: d.loc[:, d.isnull().mean() < x]
drp(d, .5)
OP實際上在他的評論中說'?'不是空值。 –
的問題是沒有明確對我來說,你可以顯示預期的輸出 – Wen
對於我想只保存feature1,feature2和他們各自的數據到我的熊貓數據框 對於25%,feature4也將包括在內 –
所以,你試試用什麼替換所有'?'?這是你的問題嗎? –