大きなデータセット(> 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_mask
)のFalse
場所をつかむための方法だろう何
df_cols = col for col if df_mask.loc[False].any()
?
DataFrame
のエラーのあるデータポイントのトラッキングをさらに迅速に行う方法がありますか?
非常にjezrael、本当に助けてくれてありがとう! (遅く返事を申し訳ありません)。しかし、それは疑問のようにダミーのデータフレームを設定した場合にのみ機能します。同じデータをCSVを「pd.read_csv」を使用してデータフレームとしてインポートし、unstack()してマスクを適用すると、行が数値以外の値を持つ列全体のすべての値に対してFalseが返されます。違いの原因を知っていますか? – HelloBlob
@HelloBlob - 編集した回答を確認してください。 – jezrael