csv ファイルを自分のデータ型に読み込もうとすると、値エラーが発生します。それが機能し、すべての行が読み込まれて正しいことを確認する必要があります。
エラーの例:
Pandas: ValueError: Integer column has NA values in column 2
Pandas Python ライブラリで整数にキャストしようとしていますが、値があります。
ただし、読み込んだ csv ファイルは手動で入力されたテスト結果で構成されているため、いくつかの誤ったエントリがあるようです。
次のコマンドを使用して読み込みます:
test = pd.read_csv("test.csv", sep=";", names=pandasframe_names, dtype=pandasframe_datatypes, skiprows=1)
名前は A、B、C、D、E であり、正しく定義されています。
誤ったエントリがある場合、行全体を失わずにこれを処理する方法が必要です。
これが私のケースです。ヘッダーA、B、C、D、Eの5つの列を持つcsvテーブルを読み込むpandasデータフレームがあります。パラメータskiprows = 1を使用して行1をスキップします。
pandas_datatypes={'A': pd.np.int64, 'B':pd.np.int64, 'C':pd.np.float64, 'D':object, 'E':object}
私の行には 5 つの列があり、最初の 2 つは int64、3 つ目は float64、次の 2 つはオブジェクト (例: 文字列) です。
これらは私が読み込んだときのdtypeと同等です。意味dtype=pandas_datatypes
今では次のようなエントリがあります:
entry 1: 5; 5; 2.2; pedagogy; teacher (correct)
entry 2: 8; 7.0; 2.2; pedagogy; teacher (incorrect, as second is float instead of int)
entry 3: NA; 5; 2.2; pedagogy; teacher (incorrect, as first value has entered NA as is missing)
entry 4: none; 5; 2.2; pedagogy; teacher (incorrect, as first value has entered none as is missing)
entry 5: 8; 5; 2; pedagogy; teacher (incorrect, as third is int instead of float)
これを最も適切に処理するにはどうしたらよいでしょうか。また、これを確実に機能させるには何を追加する必要がありますか。 1 つのエントリが誤っている場合、行全体を失いたくありません。 NULL を入力する必要がありますか。 ただし、その場合、誰かが手動で確認できるようにフラグを立てる必要があります。
ベストアンサー1
Pandas には現在、整数が NA 値をサポートする拡張型があります。これらのフィールドには pd.NA が表示されます。
https://pandas.pydata.org/docs/user_guide/basics.html#basics-dtypes
Pandas Int64 型を使用すれば問題ありません。
pandas_datatypes={'A': 'Int64', 'B': 'Int64', 'C':pd.np.float64, 'D':object, 'E':object}
pandas 1.3.5 でテストしたところ、うまく動作しました。