我正在處理大型數據集(> 100.000,> 100)。原始格式是CSV。我使用pandas
庫將這些文件作爲DataFrame
讀取。找到數據框python中的錯誤數據點
所有數據都必須是數值類型(浮點數的整數),但通常會出現數據點丟失或原始CSV文件中出現錯誤的字符串。掃描整個CSV文件需要很長時間,可以找到一點。因此,我試圖產生一個功能或類,我可以找到錯誤。並提供他們的列和行名稱和/或編號,以便快速追蹤它們。
爲了試驗和構建正確的算法,我使用了一個小的虛擬數據框,其中包含一些樣本錯誤的數據點。定位點的理想結果是例如:['B',2],['D',4],使用列和位置索引。
# Import dependency
import pandas as pd
# Create dummy DataFrame for testing
df = pd.DataFrame({'A': [1, 1, 1, 1, 1],
'B': [1, 1, '#', 1, 1], # Undesired datapoint '#' to be located
'C': [1, 1, 1, 1, 1],
'D': [1, 1, 1, 1, '0']}) # Undesired datapoint '0' to be located
`
隨着虛擬數據框我創建包含原始數據幀的布爾語句的面具數據幀。在掩碼中,所有數值(int
和float
)都被賦予True
,並且所有非數值數據被賦予爲False
。
df_mask = df.applymap(lambda x: isinstance(x, (int, float)))
現在,在定位非數值數據的部分,我卡住了。我最好的嘗試如下,但它不提供我的位置False
點。
df_cols = col for col if df_mask.loc[False].any()
什麼是搶蒙面數據框(df_mask
)的False
位置的方法嗎?
或者是否有更快的方法來執行跟蹤DataFrame
中的錯誤數據點?
非常感謝jezrael,真的有幫助! (對不起,對於最近的回覆。)但是,只有當我在問題中設置了一個虛擬數據框時才起作用。當我使用'pd.read_csv'作爲數據框從CSV導入相同的數據,然後使用unstack()並應用掩碼時,它會爲整行中具有非數字值的整列中的所有值返回False。你知道是什麼導致了差異? – HelloBlob
@HelloBlob - 請檢查編輯答案。 – jezrael